Java学习-第一部分-第二阶段-第五节:集合

打印 上一主题 下一主题

主题 889|帖子 889|积分 2667

集合

笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)
前面我们保存多个数据使用的是数组,那么数组有不足的地方,我们分析一下。
●数组

  • 长度开始时必须指定,而且一旦指定,不能更改
  • 保存的必须为同一类型的元素
  • 使用数组进行增加元素的示意代码-比较麻烦
写出Person数组扩容示意代码。
  1. Person[] pers = new Person[1]; // 大小是1
  2. pers[0] = new Person();
  3. //增加新的Person对象 ?
  4. Person[]pers2 = new Person[pers.length + 1];//新创建数组
  5. for(){} //拷贝pers数组的元素到pers2
  6. pers2[pers2.length - 1] = new Person();//添加新的对象
复制代码
集合

  • 可以动态保存任意多个对象,使用比较方便!
  • 提供了一系列方便的操作对象的方法:add、remove、set、get等
  • 使用集合添加,删除新元素的示意代码-简洁了
集合的框架体系
Java的集合类很多,主要分为两大类,如图:[背下来]

  1. //老韩解读
  2. //1。集合主要是两组(单列集合,双列集合)
  3. //2. Collection接口有两个重要的子接口 List Set,他们的实现子类都是单列集合
  4. //3. Map接口的实现子类是双列集合,存放的 K-V
  5. //4。把老师梳理的两张图记住
  6. //collection
  7. //Map
  8. ArrayList arrayList = new ArrayList();
  9. arrayList.add("jack ");
  10. arrayList.add("tom");
  11. HashMap hashMap = new HashMap();
  12. hashMap.put("NO1", "北京");
  13. hashMap.put("NO2","上海");
复制代码
Collection

Collection接口实现类的特点

  • collection实现子类可以存放多个元素,每个元素可以是Object
  • 有些Collection的实现类,可以存放重复的元素,有些不可以
  • 有些Collection的实现类,有些是有序的(List),有些不是有序(Set)
  • Collection接口没有直接的实现子类,是通过它的子接口Set 和 List来实现的
Collection接口常用方法,以实现子类ArrayList来演示.

  • add:添加单个元素
  • remove:删除指定元素
  • contains:查找元素是否存在
  • size:获取元素个数
  • isEmpty:判断是否为空
  • clear:清空
  • addAll:添加多个元素
  • containsAll:查找多个元素是否都存在
  • removeAll:删除多个元素
  • 说明:以ArrayList实现类来演示.
  1. List list = new ArrayList();
  2. //add :添加单个元素
  3. list.add("jack");
  4. list.add(10);//此处10自动转为Integer类型 list.add(new Integer(10))
  5. list.add(true);
  6. System.out.println("list=" + list);//list=[jack, 10, true]
  7. //remove:删除指定元素
  8. //list.remove(0);//删除第一个元素
  9. list.remove(true) ;//指定删除某个元素
  10. list.remove((Integer)10);//如果直接填10,java会认为是移除列表中第11个对象
  11. System.out.println("list=" + list);//list=[jack]
  12. //contains:查找元素是否存在
  13. System.out.println(list.contains( "jack"));//T
  14. //size:获取元素个数
  15. System.out.println(list.size());//1
  16. //isEmpty:判断是否为空
  17. System.out.println(list.isEmpty());//F
  18. //clear:清空list.clear();
  19. list.clear();
  20. System.out.println("list="+ list);//list=[]
  21. //addAll:添加多个元素(只要实现了collection接口就能作为参数)
  22. ArrayList list2 = new ArrayList();
  23. list2.add("红楼梦");list2.add("三国演义");
  24. list.addAll(list2);
  25. System.out.println("list=" + list);//list=[红楼梦, 三国演义]
  26. //containsAll:查找多个元素是否都存在(只要实现了collection接口就能作为参数)
  27. System.out.println(list.containsAll(list2));//T
  28. // removeAll:删除多个元素
  29. list.add("聊斋");
  30. list.removeAll(list2);
  31. System.out.println("list=" + list);//list=[聊斋]
  32. //说明:以ArrayList实现类来演示。
复制代码
Collection接口遍历元素方式1-使用Iterator(迭代器)

  • Iterator对象称为迭代器,主要用于遍历Collection集合中的元素。
  • 所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了lterator接口的对象,即可以返回一个迭代器。
  • Iterator的结构.[看图]


  • Iterator仅用于遍历集合,lterator本身并不存放对象.
提示:在调用iterator.next()方法之前必须要调用iterator.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。
  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Iterator;
  4. public class Test {
  5.     public static void main(String[] args) {
  6.         Collection col = new ArrayList();
  7.         col.add(new Book("三国演义", "罗贯中", 10.1));
  8.         col.add(new Book("小李飞刀", "古龙", 5.1));
  9.         col.add(new Book("红楼梦", "曹雪芹", 34.6));
  10.         // System.out.println("col=" + col);
  11.         //现在老师希望能够遍历col集合
  12.         //1。先得到col对应的迭代器
  13.         Iterator iterator = col.iterator();
  14.         //2.使用while循环遍历
  15.         //快捷键,快速生成while => itit (显示所有的快捷键的的快捷键ctrl + j)
  16.         while (iterator.hasNext()) {//判断是否还有数据
  17.             //返回下一个元素,类型是0bject
  18.             Object obj = iterator.next();
  19.             System.out.println("obj=" + obj);
  20.         }
  21.         //3.当退出while循环后,这时iterator迭代器,指向最后的元素
  22.         // iterator.next();//NoSuchElementException
  23.         // 4,如果希望再次遍历,需要重置我们的迭代器
  24.         iterator=col.iterator();
  25.         System.out.println( "===第二次遍历===");
  26.         while (iterator.hasNext()) {//判断是否还有数据
  27.             //返回下一个元素,类型是0bject
  28.             Object obj = iterator.next();
  29.             System.out.println("obj=" + obj);
  30.         }
  31.     }
  32. }
  33. class Book {
  34.     private String name;
  35.     private String author;
  36.     private double price;
  37.     public Book(String name, String author, double price) {
  38.         this.name = name;
  39.         this.author = author;
  40.         this.price = price;
  41.     }
  42.     @Override
  43.     public String toString() {
  44.         return "Book{" +
  45.                 "name='" + name + '\'' +
  46.                 ", author='" + author + '\'' +
  47.                 ", price=" + price +
  48.                 '}';
  49.     }
  50. }
复制代码
Collection接口遍历对象方式2-for循环增强.
增强for循环,可以代替iterator迭代器,特点:增强for就是简化版的iterator,本质一样。只能用于遍历集合或数组。
>基本语法
  1. for(元素类型 元素名:集合名或数组名){
  2.         访问元素
  3. }
复制代码
演示
  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. public class Test {
  4.     public static void main(String[] args) {
  5.         Collection col = new ArrayList();
  6.         col.add(new Book("三国演义", "罗贯中", 10.1));
  7.         col.add(new Book("小李飞刀", "古龙", 5.1));
  8.         col.add(new Book("红楼梦", "曹雪芹", 34.6));
  9.         //老韩解读
  10.         //1.使用增强for,在Collection集合
  11.         // 2.增强for,底层仍然是迭代器
  12.         //3.增强for可以理解成就是简化版本的迭代器遍历
  13.         for (Object book : col) {
  14.             System.out.println("book=" + book);
  15.         }
  16.         //增强for,也可以直接在数组使用
  17.         int[] nums = {1, 8, 10, 90};
  18.         for (int i : nums) {
  19.             System.out.println("i=" + i);
  20.         }
  21.     }
  22. }
  23. class Book {
  24.     private String name;
  25.     private String author;
  26.     private double price;
  27.     public Book(String name, String author, double price) {
  28.         this.name = name;
  29.         this.author = author;
  30.         this.price = price;
  31.     }
  32.     @Override
  33.     public String toString() {
  34.         return "Book{" +
  35.                 "name='" + name + '\'' +
  36.                 ", author='" + author + '\'' +
  37.                 ", price=" + price +
  38.                 '}';
  39.     }
  40. }
复制代码
List

List接口基本介绍
List 接口是Collection 接口的子接口 List .java

  • List集合类中元素有序(即添加顺序和取出顺序一致)、且可重复
  • List集合中的每个元素都有其对应的顺序索引,即支持索引。(list.get(3))
  • List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
  • JDK API中List接口的实现类布置前文图中展示的:
常用的有:ArrayList、LinkedList和Vector。
List接口的常用方法
List 集合里添加了一些根据索引来操作集合元素的方法

  • void add(int index, Object ele):在index位置插入ele元素
  • boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来
  • Object get(int index):获取指定index位置的元素
  • int indexOf(Object obj):返回obj在集合中首次出现的位置
  • int lastlndexOf(Object obj):返回obj在当前集合中末次出现的位置
  • Object remove(int index):移除指定index位置的元素,并返回此元素
  • Object set(int index,Object ele):设置指定index位置的元素为ele ,相当于是替换
  • List subList(int fromlndex, int tolndex):返回从fromIndex到tolndex位置的子集合
[code]List list = new ArrayList();list.add("张三丰");list.add("贾宝玉");//void add(int index,0bject ele):在index位置插入ele元素// 在index =1的位置插入一个对象list.add(1, "韩顺平");System.out.println("list=" + list);//boolean addAll(int index,Collection eles):从index位置开始将eles中的所有元素添加进来List list2 = new ArrayList();list2.add("jack");list2.add("tom");list.addAll(1, list2);System.out.println("list=" + list);//Object get(int index):获取指定index位置的元素//说过//int indexOf(0bject obj):返回obj在集合中首次出现的位置System.out.println(list.indexOf("tom"));//2//int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置list.add("韩顺平");System.out.println("list=" + list);System.out.println(list.lastIndexOf("韩顺平"));//Object remove(int index):移除指定index位置的元素,并返回此元素(直接修改list,而非返回新的)list.remove(0);System.out.println("list=" + list);//Object set(int index,0bject ele):设置指定index位置的元素为ele,相当于是替换list.set(1, "玛丽");System.out.println("list=" + list);//List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的子集合//注意返回的子集合fromIndex

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表