05集合、泛型、迭代
05集合、泛型、迭代-2018/07/13
- 1.集合
- A:集合的由来
- 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少
- B:数组和集合的区别
- 区别1 :
- 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
- 集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
- 区别2:
- 数组长度是固定的,不能自动增长
- 集合的长度的是可变的,可以根据元素的增加而增长
- C:基本功能演示 boolean add(E e) //List会一直返回true,set重复时会false boolean remove(Object o) //删除指定元素 void clear() //清空元素 boolean contains(Object o) //判断是否包含 boolean isEmpty() //判断集合是否为空 int size() //获取元素个数
- D:把集合转成数组,可以实现集合的遍历 toArray()
- E:带All的功能演示 //alt+shift+r 可以一起改名 boolean addAll(Collection c) 添加整个集合 boolean removeAll(Collection c) 删除交集,没有交集返回false boolean containsAll(Collection c) 判断是否包含集合 boolean retainAll(Collection c)
取交集,如果调用后集合改变返回true,反之,返回false - F:迭代 Iterator it = c.iterator(); /boolean b1 = it.hasNext(); Object obj1 = it.next(); System.out.println(b1); System.out.println(obj1);/ while(it.hasNext()) { System.out.println(it.next()); }
- A:集合的由来
-
2.List集合的特有功能概述 //有索引,可以重复,有序
- void add(int index,E element) index小于等于size
- E remove(int index) 返回一个泛型(object类型)通过索引删除元素
- E get(int index) 通过索引获取元素,可以用作遍历使用
- E set(int index,E element) 在索引处的元素修改
- 3.ListIterator的特有功能add,集合遍历元素,集合修改元素。 ListIterator lit = list.listIterator(); * boolean hasNext()是否有下一个 * boolean hasPrevious()是否有前一个 * Object next()返回下一个元素 * Object previous();返回上一个元素
-
4.Vector类特有功能
- public void addElement(E obj)
- public E elementAt(int index)
- public Enumeration elements()
-
5.A:数组
- 查询快修改也快
- 增删慢
B:链表
- 查询慢,修改也慢
- 增删快
- 6.List有三个儿子 查询多用ArrayList 增删多用LinkedList 如果都多ArrayList
- 7.ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同),创建新集合方式,并重写equals()方法,contains方法判断是否包含底层依赖equals方法(remove也是)
-
8.LinkedList类
- public void addFirst(E e)及addLast(E e)
- public E getFirst()及getLast()
- public E removeFirst()及public E removeLast()
- public E get(int index);
- 9.栈(先进后出) 队列(先进先出)
-
10.泛型:标识能存储的数据类型
- 提高安全性(将运行期的错误转换到编译期),省去强转的麻烦。
- <>中放的必须是引用数据类型
- 前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)
- 11.next方法只能调用一次,调用多次会让让指针移动
-
12.泛型类概述
- 把泛型定义在类上
- 定义格式 public class 类名<泛型类型1,…>
-
13.泛型方法 public <泛型类型> 返回类型 方法名(泛型类型 变量名)
- 非静态方法最好与类的泛型一致,不一致要在方法上声明
- 静态方法必须声明自己的泛型
-
14.泛型接口
- public interface 接口名<泛型类型>
-
实现:
- class Demo implements Inter //推荐这种
- class Demo implements Inter
-
15.泛型通配符<?>
- 任意类型,如果没有明确,那么就是Object以及任意的Java类了
- ? extends E 向下限定,E及其子类
- ? super E 向上限定,E及其父类
- 16.for(元素数据类型 变量 : 数组或者Collection集合) { 使用变量即可,该变量就是元素 } //fore alt+/ 可以快捷 底层依赖 Interator
-
17.三种迭代的能否删除
- 普通for循环,可以删除,但是索引要 i--
- 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
- 增强for循环不能删除
-
18.静态导入是导入类中的静态方法
- import static 包名….类名.方法名;
- 若有多个同名的静态方法,容易不知道用谁,使用时意义不大,开发不用
-
19.可变参数是一个数组
- 修饰符 返回值类型 方法名(数据类型… 变量名){}
-
20.asList()
- 将数组转成集合,不能添加
- 基本数据类型的数组转换成集合,会将一整个数组传给list
- 将数组转换成集合必须是引用数据类型
-
21.Collection中toArray(T[] a)泛型版的集合转数组
- 当集合转数组时,如果数组的长度小于等于集合的size时,转换后的数组长度等于集合的size,如果大于,分配的长度与指定长度相同
-
22.集合嵌套之ArrayList嵌套ArrayList
- ArrayList<new ArrayList> al = new ArrayList<>();
-
23.HashSet
- 添加重复时add返回false
- 可以用增强for循环遍历
- 存储自定义对象保证元素唯一性 要重写hashCode()(alt+shift+s自动生成)和equals()方法
- 24.LinkedHashSet底层是链表实现的,是set集合中唯一一个能保证怎么存就怎么取的的集合对象