数组工具类 Arrays
Arrays .sort 排序方法(底层是一个性能优于冒泡排序的算法)
Arrays .binarySearch二分查找方法
Arrays .asList(1,2,3...) 接受一个可变参数生成一个list集合
集合的长度是可变的,集合本身是一个存储容器,集合的存、取,集合自己的本身特性
集合类的顶级接口 Collection<E> 、Map两个派系
一、Collection<E>
下面挨个探讨一下Collection接口中的基本方法:
1、添加方法:
方法a: boolean add(object e); 一次添加一个元素
方法b: boolean addAll(Collection c); 将一个参数容器中的元素添加到当前容器中
2、删除方法:
方法a: boolean remove(object e); 删除一个遇到的指定对象
方法b: boolean removeAll(Collection c);删除指定的Collection中和本Collection中相同的元素
方法c:void clear();直接将集合中的元素清空
3、判断方法:
方法a: boolean contains(object e); 是否包含指定元素
方法b:boolean containsAll(Collection c); 是否包含指定容器中的元素
方法c:Boolean isEmpty(); 判断是否有元素
4、获取元素个数的方法:
int size(); 获取元素的个数
5、取交集的方法:
Boolean retainAll(Collection c);保留和指定collection集合中相同的元素,不相同的元素会被删除
Collection下的List接口
List 里面的允许存取重复元素,有序的集合(存进去1,2,3取出来也是1,2,3) ,有索引(带有索引的操作要防止下标越界)
set 里面不允许存取重复元素,无序集合
两个派系: 1)List接口实现类: 1.ArrayList类 2.LinkedList
List接口中的特有方法: add(int index ,xx);将制定元素插入到制定索引
get(int index,xx);传一个索引给指定索引的值
remove(int index);删除指定索引上的元素,返回被删除之前的元素!
set(int index ,xx):修改指定元素,返回修改之前的元素!
当迭代器操作集合,不允许操作集合的长度!不允许进行增、删操作!
List存储数据结构:
1.堆栈:在内存中开辟堆栈空间,先进后出
2.队列:先进先出
3数组:查找速度快,可以快速访问指定位置的元素(内存地址也是连续的),增删慢,破坏原有的结构(增删的时候创建新数组再把数据添加到指定位置)
4.链表(对各节点之间通过地址记录链接内有内存上的关系)查找速度慢:内存地址不是连续的
增删速度快:不需要破坏原来的结构
1)List集合:
1.ArrayList 2.LinkedList
1.ArrayList 实现类
可以存引用类型,本身是一个可变数组,父类List,Collection的实现类
此实现是不同步的, 线程是不安全的,运行速度特别快,允许存储null值
2. LinkedList 实现类
父类List,Collection的实现类 底层 链表结构实现查询慢,增删快(不需要动列表结构) 此实现是不同步的, 线程是不安全的,允许存储null值
Vector 集合:存储结构是数组实现了List接口,是线程安全的集合,运行速度慢!
2)Set接口
set集合是没有索引的,不允许存储重复元素Set接口和Collection接口方法一样
1.HashSet 2.LinkedHashSet
1.HashSet实现类:
实现set接口有哈希表(实际是HashMap实例)无序集合(存储和取出的顺序不同,不存储重复元素),可以存null元素
底层结构:哈希表(链表数组结合体每个数组都没有索引) 特点:存储取出都特别快,线程不安全,运行速度比较快;
存数据的时候把对象地址存取在数组中,下一对象可能会放到上一个元素下面形成一个链表结构,也可能直接存到数组当中
底层还会根据元素的大小自动进行扩容;
存储数据的时候,会先调用对象的哈希值,拿到哈希值会在容器中搜索有没有一样的哈希值,如果没有这个对象就存道数组中, 如 果有相同的哈希值,集合会让后来方法调用equals方法与哈希值一样的对象比较,结果如果是true,则元素重复后来的对象就存 不进去;结果如果是false(两个对象的哈希值相同,equals对比为false),就会采用桶的存储方式存储到对象后面让前一个对象记住 自己的地址
LinkedHashSet实现类;
基于双向链表的哈希表实现,保证迭代的顺序线程不安全集合;
添加:
ArrayList 可以使用contains方法判断元素是否存在;
HashSet 可以使用add()方法返回值判断,也可已使用contains方法判断;
重写HashCode和equals方法是保证数据的唯一性:
二、Map<k,v>
Map集合(双列集合:映射关系的键值对):
HashMap<K,V>
不允许出现重复的key键,可以允许相同的值出现,线程不安全集合,运行速度快, HashMap允许存储Null值,null键
常用方法: 将键值对k,v存储到集合当中 put(key,vule);Key作为键的对象,Vule作为值得对象
键的对象为字符串可以保证唯一性
LinkedHashMap
继承HashMap 保证迭代顺序(有序的)也是线程不安全
HashTable底层数据结构是哈希表,特点和HashTable线程安全集合运行速度慢
HashTable不允许存储Null值,null键