Collection集合
1.数组和集合的区别
-
相同点
都是容器,可以存储多个数据
-
不同点
-
-
数组可以存基本数据类型和引用数据类型
集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类
public class mxxl { public static void main(String[] args) { int [] arr1 = {1,2,3}; String [] arr2 = {"a","b","c"}; System.out.println(Arrays.toString(arr1)); //[1, 2, 3] System.out.println(Arrays.toString(arr2)); //[a, b, c] ArrayList<String> list1 = new ArrayList<>(); list1.add("a"); list1.add("b"); list1.add("c"); System.out.println(list1); //[a, b, c] //如果集合要存储基本数据类型,那么实际存储的是他们的包装类 //ArrayList<int> list2 = new ArrayList<int>(); 错误!!! ArrayList<Integer> list2 = new ArrayList<>(); list2.add(1); list2.add(2); list2.add(3); System.out.println(list2); //[1, 2, 3] } }

3.Collection 集合概述和使用
-
Collection集合概述
-
是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
-
JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现
-
-
创建Collection集合的对象
-
多态的方式
-
具体的实现类ArrayList
-
-
Collection集合常用方法
方法名 说明 boolean add(E e) 添加元素 boolean remove(Object o) 从集合中移除指定的元素 boolean removeIf(Object o) 根据条件进行移除 void clear() 清空集合中的元素 boolean contains(Object o) 判断集合中是否存在指定的元素 boolean isEmpty() 判断集合是否为空 int size()
import java.util.ArrayList; import java.util.Collection; public class mxxl { public static void main(String[] args) { // 多态 父类指向子类对象 Collection<String> collection = new ArrayList<>(); // boolean add(E e) 添加元素 collection.add("aaa"); collection.add("bbb"); collection.add("ccc"); collection.add("dddd"); System.out.println(collection); //[aaa, bbb, ccc, dddd] // method1(collection); // method2(collection); //method3(collection); //method4(collection); //method5(collection); //method6(collection); } //int size() 集合的长度,也就是集合中元素的个数 private static void method6(Collection<String> collection) { int size = collection.size(); System.out.println(size); } //boolean isEmpty() 判断集合是否为空 private static void method5(Collection<String> collection) { collection.clear(); boolean result = collection.isEmpty(); System.out.println(result); //True } //boolean contains(Object o) 判断集合中是否存在指定的元素 private static void method4(Collection<String> collection) { boolean result = collection.contains("a"); System.out.println(result); //false boolean result2 = collection.contains("aaa"); System.out.println(result2); } // void clear() 清空集合 //就是将集合中所有的元素全部删除. private static void method3(Collection<String> collection) { collection.clear(); System.out.println(collection); } // boolean removeif(Object o) 根据条件进行删除 //removeif底层会遍历集合,得到集合中的每一个元素 //s依次表示集合中的每一个元素 //就会把这每一个元素都到lambda表达式中去判断一下 //如果返回的是true,则删除 //如果返回的是false,则保留不删除. private static void method2(Collection<String> collection) { //boolean test(T t); 底层接口类Predicate 使用Lambda表达式重写 test方法 :返回值是布尔类型且参数 collection.removeIf( (String s)->{ return s.length() == 3; } ); System.out.println(collection); //[dddd] } // boolean remove(Object o) 从集合中移除指定的元素 //如果删除成功了,则返回true //如果删除失败了,则返回false private static void method1(Collection<String> collection) { boolean result1 = collection.remove("aaa"); boolean result2 = collection.remove("ddd"); System.out.println(result1); //true System.out.println(result2); //false System.out.println(collection); //[bbb, ccc, dddd] } }
4.Collection集合的遍历---迭代器
-
-
迭代器,集合的专用遍历方式(因为Collection 继承Iterator ,所以可以使用)
-
Iterator<E> iterator(): 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到
-
-
Iterator中的常用方法
1. boolean hasNext(): 判断当前位置是否有元素可以被取出 2.
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class mxxl { public static void main(String[] args) { Collection<String> list = new ArrayList<>(); //多态 list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); //1,获得迭代器的对象 //迭代器对象一旦被创建出来,默认指向集合的0索引处 Iterator<String> it = list.iterator(); //利用迭代器里面的方法进行遍历 //当前位置是否有元素可以被取出 // System.out.println(it.hasNext()); // //取出当前位置的元素 + 将迭代器往后移动一个索引的位置 // System.out.println(it.next()); // System.out.println(it.next()); // System.out.println(it.next()); // System.out.println(it.next()); // System.out.println(it.next()); // System.out.println(it.next()); //java.util.NoSuchElementException while (it.hasNext()) { System.out.println(it.next()); } } }
import java.util.ArrayList; public class mxxl { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("d"); for (int i = 0; i < list.size(); i++) { String s = list.get(i); if("b".equals(s)){ list.remove(i); i--; //当删除一个,后面值的索引就会减一,所有i的值也要减一,否则相邻相同的元素会漏删 //迭代器不会出现这种情况 } } System.out.println(list); //[a, c, d] } } ------------------------------- import java.util.ArrayList; import java.util.Iterator; public class MyCollectonDemo5 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("d"); Iterator<String> it = list.iterator(); while(it.hasNext()){ String s = it.next(); if("b".equals(s)){ //指向谁,那么此时就删除谁. it.remove(); } } System.out.println(list); } }
5.增强for循环【应用】
-
介绍
-
它是JDK5之后出现的,其内部原理是一个Iterator迭代器
-
实现Iterable接口的类才可以使用迭代器和增强for
-
简化数组和Collection集合的遍历
-
-
格式
// 已经将当前遍历到的元素封装到变量中了,直接使用变量即可
}
-
代码
import java.util.ArrayList; public class MyCollectonDemo6 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); list.add("f"); //1,数据类型一定是集合或者数组中元素的类型 //2,str仅仅是一个变量名而已,在循环的过程中,依次表示集合或者数组中的每一个元素 //3,list就是要遍历的集合或者数组. for(String str : list){ System.out.println(str); } } }
import java.util.ArrayList; public class mxxl { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); for(String str : list){ str = "q"; //这个是第三方变量,不会影响集合的值 System.out.println(str); } System.out.println(list); //[a, b, c, d] } }

import java.util.ArrayList; import java.util.Iterator; public class MyCollectonDemo8 { public static void main(String[] args) { ArrayList<Student> list = new ArrayList<>(); Student s1 = new Student("小皮同学",23); Student s2 = new Student("小路同学",31); Student s3 = new Student("小贾同学",33); list.add(s1); list.add(s2); list.add(s3); //迭代器的方式进行遍历 Iterator<Student> it = list.iterator(); while(it.hasNext()){ Student s = it.next(); System.out.println(s); } System.out.println("-------------------------"); //增强for for (Student student : list) { System.out.println(student); } } } —————————————————————————— public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }

浙公网安备 33010602011771号