Java集合-Collection常用方法

集合的学习,需要知道怎么使用集合,往里面存储数据,会遍历集合,把数据取出来,最后需要掌握各种集合的特点。集合和数组有什么区别呢?两者都可以存储数据,其中数组中可以存储基本数据类型也可以存储对象,但集合只能存储对象,所有的集合,都是继承自Collection接口,其为所有集合的顶层接口。

Collection接口

Collection接口,定义所有单例集合共性的方法,下面有两个子接口,一个是List接口,一个是Set接口。

List接口

List接口,其下面主要实现类有Vector集合,ArrayList集合,LinkedList集合,底层实现方式有数组,也有链表,它有如下特点:
(1)有序的集合,即存储和取出元素的顺序相同
(2)允许存储重复的元素
(3)有索引,可以使用普通的for循环遍历

Set接口

Set接口,其下面主要的实现类有TreeSet集合,HashSet集合,还有LinkedHashSet集合,前两者是无序的集合,最后一个是有序的集合,它有如下特点:
(1)不允许存储重复的元素
(2)没有索引,不能使用普通的for循环遍历

Collection接口中常用方法

collection集合中共性的方法,可以在java.util.Collection中查看,一共有如下7个,针对不同的实现类,都可以使用这7个方法。
1 public boolean add(E e):添加一个元素
2 public void clear():清空集合中所有的元素
3 public boolean remove(E e):移除集合中指定的元素
4 public boolean contains(E e):检查集合中是否包含指定的对象
5 public boolean isEmpty():判断集合是否为空
6 public void size():判断集合中元素的个数
7 public Object[] toArray():把集合元素存储到数组中

 1 package CollectionTest;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 
 6 /**
 7  * collection集合中共性的方法,可以在java.util.Collection中查看,一共有如下7个
 8  * 1 public boolean add(E e):添加一个元素
 9  * 2 public void clear():清空集合中所有的元素
10  * 3 public boolean remove(E e):移除集合中指定的元素
11  * 4 public boolean contains(E e):检查集合中是否包含指定的对象
12  * 5 public boolean isEmpty():判断集合是否为空
13  * 6 public void size():判断集合中元素的个数
14  * 7 public Object[] toArray():把集合元素存储到数组中
15  */
16 public class CollectionMethod {
17 
18     public static void main(String[] args) {
19         //定义一个集合,使用父类的接口指向子类的对象
20         Collection<String> col = new ArrayList<String>();//使用ArrayList实现类,初始化的容量为10
21         System.out.println(col);// [] 说明ArrayList重写了toString方法
22 
23         /**
24          * public boolean add(E e):添加一个元素
25          */
26         boolean r1 = col.add("Messi");
27         System.out.println(r1); //true
28         System.out.println(col); //[Messi]
29 
30         //多添加几个
31         col.add("Ronald");
32         col.add("Herry");
33         col.add("beckham");
34         System.out.println(col);//[Messi, Ronald, Herry, beckham]
35 
36         /**
37          * public boolean remove(E e):移除集合中指定的元素
38          */
39         //移除beckham
40         boolean r2 = col.remove("beckham");
41         System.out.println(r2); //true
42         System.out.println(col); //[Messi, Ronald, Herry]
43 
44         /**
45          * public boolean contains(E e):检查集合中是否包含指定的对象
46          */
47 
48         //检查集合中是否包含messi
49         boolean r3 = col.contains("Messi");
50         System.out.println(r3); //true
51         System.out.println(col); //[Messi, Ronald, Herry]
52 
53         /**
54          * public boolean isEmpty():判断集合是否为空
55          */
56         //如果为空则为true,否则为false
57         boolean r4 = col.isEmpty();
58         System.out.println(r4); //false
59 
60         /**
61          * public void size():判断集合中元素的个数
62          */
63 
64         int count=col.size();
65         System.out.println(count); //3
66 
67         /**
68          * public Object[] toArray():把集合元素存储到数组
69          */
70         Object[] arr=col.toArray();
71         for (int i = 0; i < arr.length; i++) {
72             System.out.println(arr[i]);
73         }
74 
75         /**
76          * public void clear():清空集合中所有的元素
77          */
78         col.clear();//使用后清空所有集合对象
79         System.out.println(col);
80 
81     }
82 }

控制台输出情况:

迭代器Iterator使用

迭代器iterator的使用,来自java.util.iterator,作用是为了各式各样的集合,开发了一个统一的取出集合元素的接口,其主要有两种常用使用方法
1 boolean hasNext():如果集合中还有下一个元素,就返回true,否则返回false
2 E next():取出集合中的下一个元素
使用迭代器需要使用Collection接口的iterator()方法,其返回的就是一个迭代器iterator实现类对象,有了实现类对象才能使用里面的方法
使用迭代器的基本步骤:
1 先使用Collection集合的iterator()方法获取iterator实现类对象,并使用一个iterator接口来接收,接口指向对象,为多态的应用
2 使用迭代器的hasNext()方法判断集合中还有没有下一个元素
3 使用迭代器的next()方法取出集合中下一个元素

 1 package CollectionTest;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 import java.util.Iterator;
 6 
 7 /**
 8  * 迭代器iterator的使用,来自java.util.iterator,作用是为了各式各样的集合,开发了一个统一的取出集合元素的接口,其主要有两种常用使用方法
 9  * 1 boolean hasNext():如果集合中还有下一个元素,就返回true,否则返回false
10  * 2 E next():取出集合中的下一个元素
11  * 使用迭代器需要使用Collection接口的iterator()方法,其返回的就是一个迭代器iterator实现类对象,有了实现类对象才能使用里面的方法
12  * 使用迭代器的基本步骤:
13  * 1 先使用Collection集合的iterator()方法获取iterator实现类对象,并使用一个iterator接口来接收,接口指向对象,多态的应用
14  * 2 使用迭代器的hasNext()方法判断集合中还有没有下一个元素
15  * 3 使用迭代器的next()方法取出集合中下一个元素
16  */
17 public class IteratorTest {
18 
19     public static void main(String[] args) {
20         //初始化集合,存入集合元素
21         Collection<String> col = new ArrayList<String>();
22         col.add("Messi");
23         col.add("Ronald");
24         col.add("Herry");
25         col.add("Beckham");
26         col.add("clyang");
27         System.out.println(col);
28 
29         //获取迭代器,迭代器泛型就是集合的泛型
30         Iterator<String> it = col.iterator();//返回集合元素顺序随机
31 
32         //使用步骤,得到一个集合对象
33         boolean r = it.hasNext();
34         String str = it.next();
35         System.out.println(r); //true
36         System.out.println(str); //Messi
37 
38         //可以使用循环遍历获取迭代器中每一个对象
39         while (it.hasNext()) {
40             System.out.println(it.next());
41         }
42 
43         //遍历完后,再次从迭代器取元素
44         boolean r1 = it.hasNext();
45         System.out.println(r1); //false
46         /*String str1 = it.next(); //抛出异常,NoSuchElementException
47         System.out.println(str1);*/
48 
49         System.out.println("---使用for循环遍历迭代器中元素---");
50 
51         //使用for循环遍历迭代器
52         for (Iterator<String> it1 = col.iterator(); it1.hasNext(); ) {
53             System.out.println(it1.next());
54         }
55 
56         /**
57          * 使用迭代器的原理,看自己博客记录
58          * 1 使用集合iterator()方法获取迭代器对象后,会将地址指向ArrayList底层数组的-1索引位置
59          * 2 hasNext方法会检查数组索引位置是否有元素
60          * 3 如果索引位置有元素,next方法会取出元素,并将地址往后面移动一位
61          */
62 
63     }
64 }

其中上面例子使用的集合为ArrayList,其底层采用数组实现,获取迭代器后会直接将地址指向数组前面一位索引为-1,如果是其他的数组实现,如LinkedList,其底层是通过链表来实现,链表储存的是一个个数据+地址的集合,通过上一个地址指向下一个地址,那获取迭代器后地址指向哪里?指向第一个数据之前的位置,参考博客。

控制台输出情况:

增强型for循环使用

增强型for循环的使用,Collection接口继承父接口Iterable,这个父接口的作用就是允许对象成为for-each循环的目标,增强型for循环的目的主要是遍历集合或数组元素。
使用格式:
for(集合或数组数据类型 变量名:集合或数组名){
   方法体
 }

 1 package CollectionTest;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 
 6 /**
 7  * 增强型for循环的使用,Collection接口继承父接口Iterable,这个父接口的作用就是允许对象成为for-each循环的目标
 8  * 增强型for循环的目的主要是遍历集合或数组元素
 9  * 格式:
10  * for(集合或数组数据类型 变量名:集合或数组名){
11  *     方法体
12  * }
13  */
14 public class ForEachTest {
15 
16     public static void main(String[] args) {
17         //使用增强型for循环遍历数组
18         loopArray();
19         //使用增强型for循环遍历集合
20         loopCollection();
21     }
22 
23     public static void loopArray(){
24         int[] arr=new int[]{1,3,5,7,9};
25         for(int i:arr){
26             System.out.println(i);
27         }
28     }
29 
30     public static void loopCollection(){
31         Collection<String> col=new ArrayList<String>();
32         col.add("you");
33         col.add("can");
34         col.add("marry?");
35         col.add("maybe 40 years old");
36         for(String str:col){
37             System.out.println(str);
38         }
39     }
40 }

控制台输出情况:

以上为集合Collection相关知识点,记录一下以备后面使用。

 

参考博客:

https://www.cnblogs.com/qducn/p/6228276.html

posted @ 2019-06-15 18:14  斐波那切  阅读(6664)  评论(0编辑  收藏  举报