学习笔记:Java容器Collection接口和Map接口

一、 为什么要使用Java集合框架

  使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。

  数组在内存存储方面的特点:

  •        数组初始化以后,长度就确定了。不便于扩展 ,存储的数据是有序的、可以重复的。
  •   数组声明的类型,就决定了进行元素初始化时的类型,数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。 同时无法直接获取存储元素的个数。

  Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的 key-value 键值对关联数组。

二、主要的Java集合框架

三、Collection接口的常用API

一般指Collection中的的抽象方法。

boolean add(E e) :向此集合添加指定的元素。
int size()  :返回此集合中元素的数量。
void clear()  :从集合中删除所有元素。
boolean isEmpty()  :如果该集合不包含元素,则返回true。
boolean addAll(Collection<? extends E> c)  :将指定集合中的所有元素添加到此集合。
boolean contains(Object o)  :如果该集合包含指定的元素,则返回true。
boolean containsAll(Collection<?> c) :如果该集合包含指定集合中的所有元素,则返回true。
boolean remove(Object o)  :从集合中删除指定元素的单个实例。
boolean removeAll(Collection<?> c) :删除指定集合中包含的该集合的所有元素。
boolean equals(Object o)  :比较指定的对象与此集合是否相等。
int hashCode()  :返回此集合的哈希码值。
boolean retainAll(Collection<?> c)  :只保留该集合中包含在指定集合中的元素。
Object[] toArray()  :返回包含此集合中所有元素的数组。 Collection-->数组
static  List asList( a)  :   返回由指定数组支持的固定大小的列表。 列表-->Collection
注意:java.util.ArrayList重新了这些方法而Arrays的内部类ArrayList没有重新,所以会抛出异常。可以通过ArraysList构造器来解决

  1 import org.junit.Test;
  2 
  3 import java.util.*;
  4 
  5 /**
  6  * @author vetstein
  7  * @creat 2021-03-2021/3/1-19:18
  8  *
  9  * 注意:向Collection接口的实现类的对象中加入数据obj时,要求obj所在类要重写equsls()方法。体现在contains()、remove()等API的调用中。
 10  */
 11 public class CollectionTest {
 12     @Test
 13     public void test1(){
 14         // boolean add(E e) :向此集合添加指定的元素。
 15         Collection c = new ArrayList();
 16         c.add(123);
 17         c.add(456);
 18         c.add("Good");
 19         c.add(new Person(12,"小王"));
 20         c.add(new Person(24,"小李"));
 21         System.out.println(c);//[123, 456, Good, Person{age=12, name='小王'}, Person{age=24, name='小李'}]
 22 
 23         //int size()  :返回此集合中元素的数量。
 24         int a = c.size();
 25         System.out.println(a);//5
 26 
 27         //void clear()  :从集合中删除所有元素。
 28         c.clear();
 29         int a2 = c.size();
 30         System.out.println(a2);//0
 31 
 32         //boolean isEmpty()  :如果该集合不包含元素,则返回true。
 33         boolean a3 = c.isEmpty();
 34         System.out.println(a3);//true
 35 
 36         //boolean addAll(Collection<? extends E> c)  :将指定集合中的所有元素添加到此集合。
 37         Collection c2 =  Arrays.asList(123,456,"Good",new Person(12,"小王"),new Person(14,"小李"));
 38         c.addAll(c2);
 39         System.out.println(c);//[123, 456, Good, Person{age=12, name='小王'}, Person{age=14, name='小李'}]
 40 
 41         //boolean contains(Object o)  :如果该集合包含指定的元素,则返回true。
 42         boolean bo1 = c.contains(123);
 43         System.out.println(bo1);//true
 44         boolean bo2 = c.contains(new Person(14,"小李"));
 45         System.out.println(bo2);//true
 46 
 47         //boolean containsAll(Collection<?> c)  :如果该集合包含指定集合中的所有元素,则返回true。
 48         Collection co2 = Arrays.asList(123,456,"Good");
 49         boolean bo3 = c.containsAll(co2);
 50         System.out.println(bo3);//true
 51 
 52         //boolean remove(Object o)  :从集合中删除指定元素的单个实例。
 53         c.remove(123);
 54         System.out.println(c);//[456, Good, Person{age=12, name='小王'}, Person{age=14, name='小李'}]
 55 
 56         //boolean removeAll(Collection<?> c) :删除指定集合中包含的该集合的所有元素。
 57         Collection co3 = Arrays.asList(123,456);
 58         boolean bo4 =c.removeAll(co3);
 59         System.out.println(bo4);//true
 60         System.out.println(c);//[Good, Person{age=12, name='小王'}, Person{age=14, name='小李'}]
 61 
 62         //boolean equals(Object o)  :比较指定的对象与此集合是否相等。
 63         Collection co4 = Arrays.asList("Good",new Person(12,"小王"),new Person(14,"小李"));
 64         boolean bo5 = c.equals(co4);
 65         System.out.println(bo5);//true
 66 
 67         //int hashCode()  :返回此集合的哈希码值。
 68         int num1 = c.hashCode();
 69         System.out.println(num1);//2131989475
 70 
 71         //boolean retainAll(Collection<?> c)  :只保留该集合中包含在指定集合中的元素。
 72         Collection co5 = Arrays.asList("good","Good");
 73         c.retainAll(co5);
 74         System.out.println(c);
 75 
 76         //Object[] toArray()  :返回包含此集合中所有元素的数组。 Collection-->数组
 77         c.addAll(co4);
 78         System.out.println(c);//[Good, Good, Person{age=12, name='小王'}, Person{age=14, name='小李'}]
 79         Object[] o = c.toArray();
 80         System.out.println(o.toString());//[Ljava.lang.Object;@4563e9ab
 81 
 82         //static  List asList( a)  :   返回由指定数组支持的固定大小的列表。 列表-->Collection
 83         //调用Arrays.asList()生产的List的add、remove会报异常,
 84         // 这是由Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList。
 85         // Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList
 86         // remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。
 87         // java.util.ArrayList重新了这些方法而Arrays的内部类ArrayList没有重新,所以会抛出异常。可以通过ArraysList构造器来解决
 88         Collection co6 = Arrays.asList(123,456,789);
 89         System.out.println(co6);//[123, 456, 789]
 90         //co6.add(123);//Error 会抛出java.lang.UnsupportedOperationException
 91         ArrayList list = new ArrayList(co6) ;
 92         list.add(123);
 93 
 94 
 95     }
 96 
 97     @Test
 98     public void test2() {
 99         //Iterator<E> iterator()  返回该集合中元素的迭代器。
100         Collection c = new ArrayList();
101         c.add(123);
102         c.add(456);
103         c.add("Aa");
104         c.add("Bb");
105         c.add("Cc");
106         Iterator iter = c.iterator();
107         //常用API boolean hasNext()  ,boolean hasNext()  ,default void remove()
108         while (iter.hasNext()) {
109             System.out.println(iter.next());//123 456 Aa Ba Cc
110         }
111 
112         Iterator iter1 = c.iterator();
113         while (iter1.hasNext()) {
114             if (new Integer(123).equals(iter1.next())) {
115                 iter1.remove();
116             }
117         }
118             System.out.println(c);//[456, Aa, Bb, Cc]
119     }
120 
121     @Test
122     public void test3(){
123         Collection c = new ArrayList();
124         c.add(123);
125         c.add(456);
126         c.add("Aa");
127         c.add("Bb");
128         c.add("Cc");
129        for(Object o : c){
130            System.out.println(o);//123 456 Aa Bb Cc
131        }
132     }
133 
134 
135 
136 }
View Code

 

四、ArrayList中的常用API

增加:add( )

删除:remove( )

修改: set( )

查询: get( ),indexOf( )

遍历: iterator( )

长度: size( )

 1 import org.junit.Test;
 2 
 3 import java.util.*;
 4 
 5 /**
 6  * @author vetstein
 7  * @creat 2021-03-2021/3/2-10:38
 8  */
 9 public class ArrayListTest {
10     @Test
11     public void test1(){
12         //增加: boolean add(E e)  ,void add(int index, E element)  ,
13         // boolean addAll(Collection<? extends E> c)  ,boolean addAll(int index, Collection<? extends E> c)
14         ArrayList list = new ArrayList();
15         list.add(123);
16         System.out.println(list);//[123]
17         list.add(1,456);
18         System.out.println(list);//[123, 456]
19         Collection co1 = Arrays.asList("good","Hello","nice");
20         list.addAll(co1);
21         System.out.println(list);//[123, 456, good, Hello, nice]
22         list.addAll(1,co1);
23         System.out.println(list);//[123, good, Hello, nice, 456, good, Hello, nice]
24 
25         //查 E get(int index)
26         Object ob1 = list.get(2);
27         System.out.println(ob1);//Hello
28 
29         //查找:int indexOf(Object o)
30         int in1 = list.indexOf("Hello");
31         System.out.println(in1);//2
32 
33         //查找:int lastIndexOf(Object o)
34         int in2 = list.lastIndexOf("Hello");
35         System.out.println(in2);//6
36 
37         //删除  E remove(int index)  ,boolean remove(Object o)  ,boolean removeAll(Collection<?> c)
38         list.remove(new Integer(456));
39         System.out.println(list);//[123, good, Hello, nice, good, Hello, nice]
40         list.remove(2);
41         System.out.println(list);//[123, good, nice, good, Hello, nice]
42         Collection co2 = Arrays.asList(123);
43         list.removeAll(co2);
44         System.out.println(list);//[good, nice, good, Hello, nice]
45 
46         //修改 E set(int index, E element)
47         list.set(1,"Nice");
48         System.out.println(list);//[good, Nice, good, Hello, nice]
49 
50         //List<E> subList(int fromIndex, int toIndex)  返回指定的fromIndex(包含)和toIndex(排除)之间的列表
51         List li = list.subList(1,4);
52         System.out.println(li);//[Nice, good, Hello]
53 
54         //遍历
55         Iterator iter1 = list.iterator();
56         while (iter1.hasNext()){
57             System.out.println(iter1.next());//good Nice good Hello nice
58         }
59 
60         //长度 int size()
61         int in3 = list.size();
62         System.out.println(in3);//5
63 
64         HashSet
65     }
66 }
View Code

 

五、常用工具类Collections的常用API

 1 import org.junit.Test;
 2 
 3 import java.util.*;
 4 
 5 /**
 6  * @author vetstein
 7  * @creat 2021-03-2021/3/2-20:13
 8  */
 9 public class CollectionsTest {
10 
11 
12     @Test
13     public void test1(){
14         List list = new ArrayList();
15         list.add(123);
16         list.add(456);
17         list.add(789);
18         list.add(101);
19         list.add(111);
20 
21         System.out.println(list);//[123, 456, 789, 101, 111]
22 
23         //static void reverse(List<?> list) :反转指定列表中元素的顺序。
24         Collections.reverse(list);
25         System.out.println(list);//[111, 101, 789, 456, 123]
26 
27         //static void shuffle(List<?> list)  :使用默认的随机源随机排列指定的列表。
28         Collections.shuffle(list);
29         System.out.println(list);//[456, 111, 101, 123, 789]
30 
31         //static <T extends Comparable<? super T>>
32         //void sort(List<T> list)
33         Collections.sort(list);
34         System.out.println(list);//[101, 111, 123, 456, 789]
35 
36         //static <T> void sort(List<T> list, Comparator<? super T> c)
37         Collections.sort(list, new Comparator () {
38             @Override
39             public int compare(Object o1, Object o2) {
40                 if (o1 instanceof Integer && o2 instanceof Integer){
41                     Integer in1 = (Integer) o1;
42                     Integer in2 = (Integer) o2;
43                     return -Integer.compare(in1,in2);
44                 }
45                 else
46                     throw new RuntimeException("传入数据类型部队");
47 
48             }
49         });
50         System.out.println(list);//[789, 456, 123, 111, 101]
51 
52         //static void swap(List<?> list, int i, int j)  :交换指定列表中指定位置的元素。
53         Collections.swap(list,0,4);
54         System.out.println(list);//[101, 456, 123, 111, 789]
55 
56         //static <T extends Object & Comparable<? super T>>
57         //T max(Collection<? extends T> coll)
58         Object m1 = Collections.max(list);
59         System.out.println(m1);//789
60 
61         Object m2 = Collections.max(list, new Comparator() {
62             @Override
63             public int compare(Object o1, Object o2) {
64                 if (o1 instanceof Integer && o2 instanceof Integer){
65                     Integer in1 = (Integer) o1;
66                     Integer in2 = (Integer) o2;
67                     return -Integer.compare(in1,in2);
68                 }
69                 else
70                     throw new RuntimeException("传入数据类型部队");
71             }
72         });
73         System.out.println(m2);//101
74 
75         //static <T extends Object & Comparable<? super T>>
76         //T min(Collection<? extends T> coll)
77         Object o1 = Collections.min(list);
78         System.out.println(m2);//101
79 
80         //static int frequency(Collection<?> c, Object o)  :static int frequency(Collection<?> c, Object o) 。
81         list.add(789);
82         list.add(789);
83         list.add(789);
84         int in1 = Collections.frequency(list,789);
85         System.out.println(in1);//4
86 
87         //static <T> void copy(List<? super T> dest, List<? extends T> src)  :将一个列表中的所有元素复制到另一个列表中。
88         List l1 = Arrays.asList(new Object[list.size()-3]);
89         Collections.copy(list,l1);
90         System.out.println(list);//[null, null, null, null, null, 789, 789, 789]
91 
92         //static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)  :将列表中某个指定值的所有出现替换为另一个指定值。
93         Collections.replaceAll(list,null,"good");
94         System.out.println(list);//[good, good, good, good, good, 789, 789, 789]
95         
96 
97     }
98 }
View Code

 

六、HashMap’的常用API

增加、删除、修改操作:put( ),putAll( ),remove( ),clear( )

查询操作:get( ),containsKey( ),containsValue( ),size( ),isEmpty( ),equals( )

元视图操作:keySet( ),values( ),entrySet( )

 

  1 import org.junit.Test;
  2 
  3 import java.util.*;
  4 
  5 /**
  6  * @author vetstein
  7  * @creat 2021-03-2021/3/2-22:49
  8  */
  9 public class HashMapTest {
 10     @Test
 11     public void test1(){
 12         //添加,删除,修改操作
 13         Map m = new HashMap();
 14         m.put("小赵",13);
 15         m.put("小钱",14);
 16         m.put("小孙",15);
 17         m.put("小李",16);
 18         System.out.println(m);//{小孙=15, 小李=16, 小钱=14, 小赵=13}
 19         m.put("小赵",14);
 20         System.out.println(m);//{小孙=15, 小李=16, 小钱=14, 小赵=14}
 21 
 22         Map ma1 = new HashMap();
 23         ma1.put("小周",17);
 24         ma1.put("小吴",18);
 25         m.putAll(ma1);
 26         System.out.println(m);//{小孙=15, 小周=17, 小李=16, 小钱=14, 小赵=14, 小吴=18}
 27 
 28         m.remove("小孙");
 29         System.out.println(m);//{小周=17, 小李=16, 小钱=14, 小赵=14, 小吴=18}
 30 
 31         m.clear();
 32         System.out.println(m);//{}
 33 
 34     }
 35 
 36     @Test
 37     public void test2(){
 38         //元素查询的操作
 39         Map m = new HashMap();
 40         m.put("小赵",13);
 41         m.put("小钱",14);
 42         m.put("小孙",15);
 43         m.put("小李",16);
 44 
 45         Object o = m.get("小李");
 46         System.out.println(o);//16
 47 
 48         boolean bo1 = m.containsKey("小李");
 49         System.out.println(bo1);//true
 50 
 51         boolean bo2 = m.containsValue(15);
 52         System.out.println(bo2);//true
 53 
 54         int in1 = m.size();
 55         System.out.println(in1);//4
 56 
 57         boolean bo3 = m.isEmpty();
 58         System.out.println(bo3);//false
 59 
 60         Map m2 = new HashMap();
 61         m2.put("小赵",14);
 62         m2.put("小钱",14);
 63         m2.put("小李",16);
 64         m2.put("小周",17);
 65         m2.put("小吴",18);
 66         Boolean bo4 = m2.equals(m2);
 67         System.out.println(bo4);//true
 68 
 69     }
 70 
 71     @Test
 72     public void test3(){
 73         //元视图操作
 74         Map m2 = new HashMap();
 75         m2.put("小赵",14);
 76         m2.put("小钱",14);
 77         m2.put("小李",16);
 78         m2.put("小周",17);
 79         m2.put("小吴",18);
 80         System.out.println(m2);
 81 
 82         Set s = m2.keySet();
 83         System.out.println(s);
 84         Iterator iter1 = s.iterator();
 85         while (iter1.hasNext()){
 86             System.out.println(iter1.next());
 87             //17
 88             //16
 89             //14
 90             //14
 91             //18
 92         }
 93         Collection c = m2.values();
 94         Iterator iter2 = c.iterator();
 95         while (iter2.hasNext()){
 96             System.out.println(iter2.next());//[17, 16, 14, 14, 18]
 97         }
 98         System.out.println(c);
 99         Set s1 = m2.entrySet();
100         Iterator iter3 = s1.iterator();
101         while (iter3.hasNext()){
102             Map.Entry e = (Map.Entry) iter3.next();
103             System.out.println("key "+e.getKey()+" Value "+e.getValue());
104             //key 小周 Value 17 
105             // key 小李 Value 16
106             //key 小钱 Value 14
107             //key 小赵 Value 14
108             //key 小吴 Value 18
109         }
110 
111         Iterator iter4 = s.iterator();
112         while (iter4.hasNext()){
113             Object o = iter4.next();
114             System.out.println(o+"value is "+m2.get(o));//小周value is 17 小李value is 16 小钱value is 14 小赵value is 14
115                                                         //小吴value is 18
116         }
117     }
118 }
View Code

 

 

 

  

  

 

 

            

  

posted @ 2021-03-02 23:39  夏天的风key  阅读(80)  评论(0编辑  收藏  举报