Java集合类存放于 java.util 包中,是一个用来存放对象的容器。集合的长度不定,数组在定义的时候长度便已经固定。
注意:①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。
②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。
③、集合可以存放不同类型,不限数量的数据类型。
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
Collection:
list:有序可重复,包括 Arraylist、Linkedlist、Vector、Stack,有公用的方法包括add、remove、size、 contains
Set:无序不可重复,包括 Hashset、Treeset
Map
Map 存储一组键值对象,提供key(键)到value(值)的映射,包括 Hashmap、Hashtable
Collections:
collections是java提供的一个集合工具类,提供排序、遍历等方法
arraylist有序可重复,可包含多个null元素,默认容量为10,可自动扩容缩容,每次默认自增50%。arraylist遍历和随机访问方便,具有3个构造方法,分别是1.默认构造方法 2.参数为集合的构造方法 3.指定长度的构造方法。
arraylist常用方法:
注意:遍历过程中不允许删除元素除非使用迭代器
linklist是链表式存储,无序不重复,插入、删除时效率较高,主要方法包括Addfirst 、addlast、getfirst、getlast,上转型之后只能调用转型后对象的方法
vector有索引,能够自动扩容缩容,扩容默认增长一倍,
与arraylist的区别:
实现原理相同,都是基于动态数组,很多情况下可互用
Arraylist:线程非安全的,重速度轻安全
Vector:线程安全
泛型:指定该集合只能存放某种类型的元素
list的遍历通过迭代器实现,通过list.Iterator()得到迭代器对象
Iterator it = list.Iterator();
While(it.hasnext){
Student stu = (Student)it.next();
}
注意:
规则:先进后出 后进先出
Push压入 pop出 peek得到栈顶对象但不移除它
hashset是collection接口的完全实现,hashset无序不重复。
关于如何定义元素是否重复:
Hashset在比较对象时会使用hashcode和equels方法
先比较hashcode再equels
重写equels时一定要重写hashcode 否则会违背上面4大原则
有序不重复 ,使用元素的自然顺序 ,结构是基于红黑树
元素的比较通过实现comparable接口并重写compareTo方法来实现 即 implement comparable
Treeset在做add存放元素时就要开始比较了
comparable
实现comparator接口 重写compare方法
Set set = new TreeSet(new MyCpmpare)//将一把称交给集合
Comparable接口:元素自身具备比较的特性
Comparator接口:集合自身具备比较的特性
常用方法:
放put 键不允许重复,如果重复,后面的会把前面的覆盖
得到get(key)
得到长度size()
得到键的集合map.keySet() 得到值的集合collection<> c = map.values()
entrySet()返回一个set集合 里面放entry对象 相当于将key和value放到一个对象里面
entry代表map中的映射关系 entry提供getKey和getValue方法
hashmap、treemap、hashtable的比较:
hashmap 哈希表 非线程安全 key允许null
treemap 红黑树 线程安全
hashtable 哈希表 非线程安全 key不允许null
数据结构
Arraylist 动态数组(遍历)
Linklist 链表(增、删)
Vector 动态数组 同步的 线程安全
Collections.binarySearch(要查找的集合,要查找的元素)
Arrays.asList(数组);将数组转换为一个List集合
System.currentTimeMillis得到系统时间
Arraylist:新容量=(旧容量*3)/2+1
Vector 翻倍增长
Hashmap 不同步,线程不安全
Hashtable 同步,线程安全,继承于dictionary
Hashmap
Hashset 基于hashmap实现 基于hashmap的键
Collections常用方法:
binarysearch二分查找默认 调用之前必须进行升序排序
Sort排序
Min/max
Reverse反转
Replaceall替换 Copy
aslist 将数组转换为列表
对于基本数据类型数组,整个数组转换成一个元素
对象数组中的元素转换成集合中的元素
可以代表多种类型 泛型的本质是参数化类型
Class 类名
真正使用类的对象的时候,可以给T赋值
类中T所出现的地方都变成了赋值的类型
使用了泛型的方法:在泛型类中的方法
Public
接口继承多参数泛型
1.默认objec
2.实现接口时就确定类型是什么
3.使用时才确定 class 类名
多参数泛型类
例如:class Myclass
T type, K key, V value, E element, ? 不确定的Java类型
限定:泛型能够代表的类型被限定
默认可以接受泛型类型的子类
现在泛型的上限是fruit,所以现在泛型所等代表的只能是fruit类及其子类
集合中泛型限定的使用 集合中不能使用泛型上限
集合中泛型下限的使用
?extends T:上限:类型是T及其子类
?super T:下限:类型是T及其父类