集合进阶
(一)泛型
-
统一数据类型
-
避免强制类型转换带来的异常
-
如果不写泛型,默认为Object
1.泛型类
-
当一个类的变量数据类型不确定时
修饰符 class 类名<类型>{}
public class ArrayList<E>{}
2.泛型方法
-
方法类型不确定
修饰符<类型> 返回值类型 方法名 (类型 变量名){}
public <T> void show(T t){}
3.泛型接口
修饰符 interface 接口名<类型>
Public interface List<E>{}
-
重点:如何使用
-
1.实现类给出具体类型
-
2.实现类延续泛型,创建对象时在确定
4.通配符
-
可约束一定的范围
-
? extends E : 表示可以传递E或者E所以子类类型
-
? super E: 表示可以传递E的所有父类类型
5.小结
-
指定泛型的类型后,传递数据时,可以传递该类型和其子类
-
泛型不具备继承性,但数据具备继承性
-
(二)、集合的体系结构
-
collection
-
List
-
ArrayList
-
linkedList
-
Vector
-
-
Set
-
HashSet
-
LinkedHashSet
-
-
TreeSet
-
-
-
List 集合的:添加的元素是有序(存和取有序、非排序的含义)、可重复、有索引。
Set集合:添加的元素是无序(存和取可能不一样)、无重复、无索引。
collection常用方法:
-
add 集合里添加元素(Boolean 永远为true)
-
clear 集合清空(void)
-
remove 删除元素(Boolean 删除成功true 否则返回false)
-
contains 判断某个元素是否包含在集合(Boolean) 注意:自定义类型判断是需重写equals(objects里的 依赖于地址)
-
isEmpty 判断是否为空(Boolean)
-
size 集合的长度(int)
collection的遍历方式:
-
迭代器遍历(不依赖索引)
-
迭代器获取:类——> iterator
-
方法有 hasNext 判断是否有元素;next 取当前元素,指针后移
-
注意:指针不会复位;遍历时,不可以利用集合的方式增加会删除(利用迭代器的remove 来删除);
-
-
增强for 遍历(底层是迭代器)
-
使用范围:所有的单列集合和数组
-
for (元素的数据类型 变量名 :数组或集合){
}
for (String s : list ){
sout(s);
} -
-
-
Lambda 表达式遍历
单列集合:一次只添加一个
-
List
-
继承了collection的方法
-
常见方法:
void add(int index, E element) //指定位置插入元素
E remove(int index) //删除指定位置的元素,并返回
E set(int index,E element) //修改指定位置的元素,并返回先前的元素
E get(int index,E element) //返回指定位置的元素 -
遍历方式:
-
迭代器(要删除元素)
-
增强for 遍历(仅遍历)
-
Lambda 表达式遍历(仅遍历)
-
普通for 遍历(用索引操作)
-
列表迭代器遍历(添加元素)
-
2.LinkedList
-
底层为双链表,查询慢,增删快
-
特有方法:
public void addFirst(E e)表头插入元素
public void addLast(E e)表尾插入元素
public E getFirst()
public E getLast()
public E removeFirst()
public E removeLast()
-
-
双列集合:一次添加一对
HashSet
-
无序 不重复 无索引 (可用于去重复数据)
-
方法 hashcode :计算哈希值;自定义类型需要重写
*LinkedHashSet
-
有序 不重复 无索引
方法同上
TreeSet
-
不重复 无索引 可排序(底层基于红黑树 来排序)
-
排序的规则:
-
默认:Comparable接口指定
-
比较器排序:创建对象时,传递比较强Comparator指定规则(第一种不能满足要求时使用)
-
总结
-
ArrayList和HashSet 常用
-
LinkedList 元素可重复 并且 增删 操作明显多于查询
-
LinkedHashset 去重 保证存取顺序
-
TreeSet 排序
标签:遍历,迭代,元素,泛型,集合,public From: https://www.cnblogs.com/Lhaitao/p/17066435.html