集合
笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)
前面我们保存多个数据使用的是数组,那么数组有不足的地方,我们分析一下。
●数组
- 长度开始时必须指定,而且一旦指定,不能更改
- 保存的必须为同一类型的元素
- 使用数组进行增加元素的示意代码-比较麻烦
写出Person数组扩容示意代码。- Person[] pers = new Person[1]; // 大小是1
- pers[0] = new Person();
- //增加新的Person对象 ?
- Person[]pers2 = new Person[pers.length + 1];//新创建数组
- for(){} //拷贝pers数组的元素到pers2
- pers2[pers2.length - 1] = new Person();//添加新的对象
复制代码 集合
- 可以动态保存任意多个对象,使用比较方便!
- 提供了一系列方便的操作对象的方法:add、remove、set、get等
- 使用集合添加,删除新元素的示意代码-简洁了
集合的框架体系
Java的集合类很多,主要分为两大类,如图:[背下来]

 - //老韩解读
- //1。集合主要是两组(单列集合,双列集合)
- //2. Collection接口有两个重要的子接口 List Set,他们的实现子类都是单列集合
- //3. Map接口的实现子类是双列集合,存放的 K-V
- //4。把老师梳理的两张图记住
- //collection
- //Map
- ArrayList arrayList = new ArrayList();
- arrayList.add("jack ");
- arrayList.add("tom");
- HashMap hashMap = new HashMap();
- hashMap.put("NO1", "北京");
- 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实现类来演示.
- List list = new ArrayList();
- //add :添加单个元素
- list.add("jack");
- list.add(10);//此处10自动转为Integer类型 list.add(new Integer(10))
- list.add(true);
- System.out.println("list=" + list);//list=[jack, 10, true]
- //remove:删除指定元素
- //list.remove(0);//删除第一个元素
- list.remove(true) ;//指定删除某个元素
- list.remove((Integer)10);//如果直接填10,java会认为是移除列表中第11个对象
- System.out.println("list=" + list);//list=[jack]
- //contains:查找元素是否存在
- System.out.println(list.contains( "jack"));//T
- //size:获取元素个数
- System.out.println(list.size());//1
- //isEmpty:判断是否为空
- System.out.println(list.isEmpty());//F
- //clear:清空list.clear();
- list.clear();
- System.out.println("list="+ list);//list=[]
- //addAll:添加多个元素(只要实现了collection接口就能作为参数)
- ArrayList list2 = new ArrayList();
- list2.add("红楼梦");list2.add("三国演义");
- list.addAll(list2);
- System.out.println("list=" + list);//list=[红楼梦, 三国演义]
- //containsAll:查找多个元素是否都存在(只要实现了collection接口就能作为参数)
- System.out.println(list.containsAll(list2));//T
- // removeAll:删除多个元素
- list.add("聊斋");
- list.removeAll(list2);
- System.out.println("list=" + list);//list=[聊斋]
- //说明:以ArrayList实现类来演示。
复制代码 Collection接口遍历元素方式1-使用Iterator(迭代器)
- Iterator对象称为迭代器,主要用于遍历Collection集合中的元素。
- 所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了lterator接口的对象,即可以返回一个迭代器。
- Iterator的结构.[看图]

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