该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口
示例代码:
1. import java.util.LinkedList;
2. import java.util.Queue;
3.
4. publicclassQueueDemo{
5. publicstaticvoid main(String[] args){
6. // add()和remove()方法在失败的时候会抛出异常(不推荐)
7. Queue queue =newLinkedList();
8. // 添加元素
9. queue.offer("同学A");
10. queue.offer("同学B");
11. queue.offer("同学C");
12. queue.offer("同学D");
13. queue.offer("同学E");
14. // 遍历队列
15. System.out.println("----遍历队列----");
16. for(String q : queue){
17. System.out.print(q +"\t");
18. }
19. System.out.println();
20.
21. // 返回第一个元素,并在队列中删除
22. System.out.println("------poll------");
23. System.out.println("poll="+ queue.poll());
24. System.out.println(queue);
25. // 返回第一个元素
26. System.out.println("------element------");
27. System.out.println("element="+ queue.element());
28. System.out.println(queue);
29. // 返回第一个元素
30. System.out.println("------peek------");
31. System.out.println("peek="+ queue.peek());
32. System.out.println(queue);
33. }
34.}
2、Map集合
Map接口中键和值一一映射. 可以通过键来获取值。
给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键来访问对应的值。
当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常.
当对象的类型和Map里元素类型不兼容的时候,就会抛出一个 ClassCastException异常。
当在不允许使用Null对象的Map中使用Null对象,会抛出一个NullPointerException 异常。
当尝试修改一个只读的Map时,会抛出一个UnsupportedOperationException异常。
一、Map接口示例代码
示例代码:
1. import java.util.HashMap;
2. import java.util.Iterator;
3. import java.util.Map;
4. import java.util.Set;
5.
6. /**
7. * Map接口 key-value 根据一个对象查找对象. HashMap、HashTable、TreeMap是它的实现类,
8. *
9. * @author sxj
10. *
11. */
12.publicclassHashMapAndHashTable{
13. publicstaticvoid main(String[] args){
14. // 如果是基本数据类型,声明的map的时候使用包装类
15. Map map =newHashMap<>();
16.
17. // 添加数据 put当key不存在时,添加key-value
18. map.put(1,"str1");
19. map.put(2,"str2");
20. map.put(3,"str3");
21. map.put(4,"str4");
22. map.put(5,"str5");
23. // put 当key存在时,修改key对应的value
24. map.put(5,"111111");
25.
26. map.put(6,null);
27. map.put(7,null);
28.
29. // 移除 remove(key)
30. map.remove(7);
31.
32. // 判断是否存在key
33. System.out.println("是否存在key:5===》"+ map.containsKey(5));
34. // 判断是否存在value
35. System.out.println("是否存在Value:str4====>"+ map.containsValue("str4"));
36.
37. // 清空map
38. // map.clear();
39.
40. System.out.println("map是否为空:"+ map.isEmpty());
41.
42. // 输出
43. System.out.println(map);
44. // 遍历
45. Set keysSet = map.keySet();
46. Iterator iterator = keysSet.iterator();
47. while(iterator.hasNext()){
48. Integer intKey = iterator.next();
49. System.out.println("key:"+ intKey +"---->Value:"
50. + map.get(intKey));
51. }
52. System.out.println("--------------------");
53. for(Iterator iterator2 = keysSet.iterator(); iterator2.hasNext();){
54. int intKey = iterator2.next();
55. System.out.println("key:"+ intKey +"---->Value:"
56. + map.get(intKey));
57. }
58. System.out.println("--------------------");
59. for(int intKey : keysSet){
60. System.out.println("key:"+ intKey +"---->Value:"
61. + map.get(intKey));
62. }
63. }
64.}
二、TreeMap类
与 TreeSet类似的是,TreeMap中也提供了一系列根据key顺序访问key-value对的方法:
示例代码:
1. import java.util.Map;
2. import java.util.TreeMap;
3.
4. publicclassTreeMapDemo{
5. publicstaticvoid main(String[] args){
6.
7. // 如果是基本数据类型,声明的map的时候使用包装类
8. TreeMap map =newTreeMap<>();
9.
10. // 添加数据 put当key不存在时,添加key-value
11. map.put(1,"str1");
12. map.put(2,"str2");
13. map.put(3,"str3");
14. map.put(4,"str4");
15. map.put(5,"str5");
16. // put 当key存在时,修改key对应的value
17. map.put(5,"111111");
18.
19. map.put(6,null);
20. map.put(7,null);
21.
22. System.out.println(map);
23. System.out.println("--------------------------");
24. //firstEntry() firstKey() lastEntry() lastKey()
25. System.out.println("firstEntry()--->"+map.firstEntry());
26. System.out.println("firstKey()--->"+map.firstKey());
27. System.out.println("lastEntry()--->"+map.lastEntry());
28. System.out.println("lastKey()--->"+map.lastKey());
29.
30. System.out.println("--------------------------");
31. //higherEntry(K key) higherKey(K key) lowerEntry(K key) lowerKey(K key)
32. System.out.println("higherKey(4)--->"+map.higherKey(4));
33. System.out.println("higherEntry(4)--->"+map.higherEntry(4));
34. System.out.println("lowerKey(4)--->"+map.lowerKey(4));
35. System.out.println("lowerEntry(4)--->"+map.lowerEntry(4));
36.
37. System.out.println("--------------------------");
38. // headMap(K toKey) tailMap(K fromKey) subMap(K fromKey, K toKey)
39. Map mapHeadMap=map.headMap(4);
40. Map mapTailMap=map.tailMap(4);
41. Map mapSubMap=map.subMap(2,5);
42.
43. System.out.println("headMap(4)--->"+mapHeadMap);
44. System.out.println("tailMap(4)--->"+mapTailMap);
45. System.out.println("subMap(2,5)--->"+mapSubMap);
46.
47. }
48.}
由于TreeMap是有序的,也支持Comparable和Comparator两种排序方式。TreeMap主要是Key值排序
TreeMapComparable排序示例代码:
1. import java.util.Map;
2. import java.util.Set;
3. import java.util.TreeMap;
4.
5. publicclassTreeMapDemo1{
6. publicstaticvoid main(String[] args){
7. Map map=newTreeMap();
8. map.put(newPerson1("1",51),"1");
9. map.put(newPerson1("2",15),"2");
10. map.put(newPerson1("3",32),"3");
11. map.put(newPerson1("4",24),"4");
12. map.put(newPerson1("5",6),"5");
13.
14. Set kSet=map.keySet();
15. for(Person1 person1 : kSet){
16. System.out.println("name:"+person1.getName()+";age:"+person1.getAge()+";num:"+map.get(person1));
17. }
18. }
19.}
20.
21.classPerson1implementsComparable{
22. privateString name;
23. privateint age;
24.
25. publicPerson1(String name,int age){
26. this.name=name;
27. this.age=age;
28. }
29.
30. publicString getName(){
31. return name;
32. }
33.
34. publicvoid setName(String name){
35. this.name = name;
36. }
37.
38. publicint getAge(){
39. return age;
40. }
41.
42. publicvoid setAge(int age){
43. this.age = age;
44. }
45.
46. @Override
47. publicint compareTo(Person1 o){
48. // 从小到大 :this-o
49. // 从大到小:o-this
50. // return this.age - o.age;
51. if(this.age != o.age){
52. returnthis.age - o.age;
53. }else{
54. returnthis.name.compareTo(o.name);
55. }
56. }
57.}
TreeMapComparator排序示例代码:
1. import java.util.Comparator;
2. import java.util.Map;
3. import java.util.Set;
4. import java.util.TreeMap;
5.
6. publicclassTreeMapDemo2{
7. publicstaticvoid main(String[] args){
8. Map map =newTreeMap(
9. newComparator(){
10. @Override
11. publicint compare(Person2 o1,Person2 o2){
12. /**
13. * 从小到大:o1-o2 从大到小:o2-o1
14. */
15. if(o1.getAge()!= o2.getAge()){
16. return o1.getAge()- o2.getAge();
17. }else{
18. return o2.getName().compareTo(o1.getName());
19. }
20. }
21. });
22.
23. map.put(newPerson2("1",51),"1");
24. map.put(newPerson2("2",15),"2");
25. map.put(newPerson2("3",32),"3");
26. map.put(newPerson2("4",24),"4");
27. map.put(newPerson2("5",6),"5");
28.
29. Set kSet = map.keySet();
30. for(Person2Person2: kSet){
31. System.out.println("name:"+Person2.getName()+";age:"
32. +Person2.getAge()+";num:"+ map.get(Person2));
33. }
34. }
35.}
36.
37.classPerson2{
38. privateString name;
39. privateint age;
40.
41. publicPerson2(String name,int age){
42. this.name = name;
43. this.age = age;
44. }
45.
46. publicString getName(){
47. return name;
48. }
49.
50. publicvoid setName(String name){
51. this.name = name;
52. }
53.
54. publicint getAge(){
55. return age;
56. }
57.
58. publicvoid setAge(int age){
59. this.age = age;
60. }
61.}