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相关知识点,记录一下以备后面使用。
参考博客: