单列集合
单列集合介绍
Collection集合
- 集合的定义
public static void main(String[] args) { // 注意: Collection 是顶层接口,不能进行数据实例化,所以我们想要获取其对象,需要使用子类实例化后赋值给父类变量 // 单列集合的定义格式: // 集合类型<泛型> 集合名称 = new 集合类型<泛型>(); // 定义集合时,如果在前边书写了泛型, new后边的类型就可以省略泛型,前后泛型必须一致 Collection<String> list = new ArrayList<>(); //添加数据,可以使用add API进行添加数据 list.add("hello"); list.add("world"); list.add("java"); // 在集合中重写了toString 可以直接打印集合中的数据内容 System.out.println(list); // [hello, world, java] }
- 集合的成员方法
public static void main(String[] args) { // 定义单列集合对象 Collection<String> list = new ArrayList<>(); //添加数据,可以使用add API进行添加数据 //1.public boolean add(E e) 添加元素. list.add("hello"); list.add("world"); list.add("java"); //2.public boolean remove(Object obj) 从集合中移除指定的元素. // 删除成功,返回true 如果删除不成功返回false boolean h = list.remove("hello"); System.out.println(h); //3.public void clear() 清空集合对象 // list.clear(); //4.public boolean contains(Object obj) 判断集合中是否包含指定的元素 // 如果包含,返回true, 如果不包含,返回false System.out.println(list.contains("hello")); System.out.println(list.contains("传智")); //5.public boolean isEmpty() 判断集合是否为空 System.out.println(list.isEmpty()); //6.public int size() 获取集合的长度, 即集合中元素的个数 System.out.println(list.size()); // 获取字符串长度length() // 获取数组长度 length // 在集合中重写了toString 可以直接打印集合中的数据内容 System.out.println(list); }
- 集合遍历
public static void main(String[] args) { // 创建Collection对象 Collection<String> list = new ArrayList<>(); //添加数据,可以使用add API进行添加数据 list.add("hello"); list.add("world"); list.add("java"); // 遍历 Collection对象不能通过下标获取元素数据 // 方法一: 使用迭代器对集合进行迭代 //1.构造迭代器 Iterator<String> itor = list.iterator(); //2.判断迭代器中是否存在下一个元素,如果存在,则获取,如果不存在,终止循环 hasnext // 分析: 我们使用哪种方式循环?? while 因为循环次数不定 // hasNext()判断集合中是否存在下一个值 // next()获取集合中的下一个值 while (itor.hasNext()){ System.out.println(itor.next()); } // 方法二: 增强for foreach // 格式: for(临时变量类型 临时变量 : 集合或者数组){} // 增强for 会以此从集合汇总获取每一个值,并赋值给临时变量 for (String s: list){ System.out.println(s); } }
4.集合储存对象数据
public static void main(String[] args) { //1. 创建集合对象 Collection<Student> stuList = new ArrayList<>(); //2.向集合对象中添加数据 stuList.add(new Student("小明", 12)); stuList.add(new Student("小方", 13)); stuList.add(new Student("小莉", 15)); //3.输出集合对象的值 System.out.println(stuList); // 4.遍历集合 for(Student s : stuList){ System.out.println(s); } }
List集合
List的遍历
public static void main(String[] args) { // 1.创建list集合对象 ArrayList<Student> stuList = new ArrayList<>(); // 2.向list集合对象中添加学生信息 stuList.add(new Student("小明", 12)); stuList.add(0, new Student("小方", 14)); stuList.add(new Student("小红", 15)); // 3.打印集合对象 // System.out.println(stuList); // 4.遍历集合对象 // 方法一: 普通迭代器 Iterator<Student> itor = stuList.iterator(); // while (itor.hasNext()){ // System.out.println(itor.next()); // } //迭代器的快捷键是 itit while (itor.hasNext()) { Student s = itor.next(); System.out.println(s); } System.out.println("---------------"); // 方法二: 列表迭代器 ListIterator<Student> sitor = stuList.listIterator(); while (sitor.hasNext()) { Student s = sitor.next(); System.out.println(s); } System.out.println("---------------"); // 方法三: 增强for //增强for 的快捷键是 iter for (Student s : stuList) { System.out.println(s); } System.out.println("---------------"); // 方法四:普通for for (int i = 0; i < stuList.size(); i++) { System.out.println(stuList.get(i)); } }
- list的正向遍历和逆向遍历
public static void main(String[] args) { // 创建list对象 ArrayList<String> list = new ArrayList<>(); // 添加数据 list.add("hello"); list.add("world"); list.add("java"); // 打印列表对象 System.out.println(list); //构造列表迭代器 ListIterator<String> sitor = list.listIterator(); // 正向遍历 while (sitor.hasNext()) { String s = sitor.next(); System.out.println(s); } // 逆向遍历 while (sitor.hasPrevious()) { String s = sitor.previous(); System.out.println(s); } }
- 并发修改异常
public static void main(String[] args) { // 创建list对象 ArrayList<String> list = new ArrayList<>(); // 添加数据 list.add("hello"); list.add("world"); list.add("java"); // 创建迭代器 // Iterator<String> itor = list.iterator(); //遍历集合 // ConcurrentModificationException // 并发修改异常, 在我们使用迭代器的过程中不能修改迭代器控制的集合 // while (itor.hasNext()) { // String s = itor.next(); // if (s.equals("world")){ // list.add("javaEE"); // } // } // 方法一: 使用listIterator ListIterator<String> sitor = list.listIterator(); while (sitor.hasNext()) { String s = sitor.next(); if (s.equals("world")){ //ConcurrentModificationExceptio // 在此处使用集合的add方法依然会报并发修改异常 // list.add("javaEE"); //如果想要解决这个问题需要使用listIterator中的add方法 sitor.add("javaEE"); } } // 方法二: 直接使用普通for循环,不构造迭代器 for (int i = 0; i < list.size(); i++) { if (list.get(i).equals("world")){ list.add("javaEE"); } } System.out.println(list); // 注意:增强for本质上也是使用了迭代器,所以也存在并发修改异常 // for (String s : list) { // // ConcurrentModificationException // if (s.equals("world")){ // list.add("javaEE"); // } // } }
增强for
常见的数据结构
常用的数据结构 1. 栈: 先进后出, 后进先出 2. 队列: 先进先出, 后进后出 3. 数组: 改和查效率高, 增删效率低 4. 链表: 增删效率高, 改查效率低
List集合的子类
Set集合
set集合保存对象
public static void main(String[] args) { // 创建hashset对象 HashSet<Student> hs = new HashSet<>(); // 添加数据 hs.add(new Student("小明", 15)); hs.add(new Student("小方", 14)); hs.add(new Student("小黄", 16)); hs.add(new Student("小黄", 16)); // 遍历集合将结果打印到控制台上 // 使用功能hashset保存对象,如果重写hashcode方法,同样成员变量的对象将被去重,否则不去重 Iterator<Student> itor = hs.iterator(); while (itor.hasNext()) { Student s = itor.next(); System.out.println(s); } }