java集合

java集合首先可以分为List、Set、Map这三种体系
Set:无序、不可重复的集合
List:有序、重复的集合
Map:代表具有映射关系的集合
注:java5以后又出现了queue体系集合,代表一种队列集合实现
**集合和数组的区别:**数组的元素可以是基本数据类型的值也可以是对象,而集合里只能保存对象
1.Iterator遍历元素:
a)boolean hashNext():如果被迭代的集合元素还没有被遍历,则返回true
b)Object next():返回集合里的下一个元素
c)void remove():删除集合里上一次next()方法返回的元素
一、HashSet
1.HashSet特点:
a)不能保证元素的排列顺序
b)HashSet是不同步的,如果多个线程同时访问一个HashSet,必须要保证同步
c)集合元素值可以是null
2.HashSet用hashCode和equals方法来判断两个对象是不是同一个对象
hash算法是根据元素的值来计算出该元素的存储位置,而HashSet是通过每个元素的hashcode值来计算索引,从而可以自由增加HashSet的长度,并且可以根据元素的哈市Code值来访问元素,实际上HashSet是HashMap的一个实现类HashSet中的元素都存放在HashMap的key上面。
3.HashSet的底层实现
HashSet实际上是建立在Hashmap的基础上,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 present,它是一个静态的 Object 对象。
二、ArrayList和Vector
Arraylist 和Vector都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的允许再分配的Object[]数组,他们使用了initialCapacity参数来设置该数组的长度,当向Array List或Vector中添加了元素超出了该数组的长度时,他们的initialCapability会自动增加
①二者的区别:ArrayList是线程不安全的,Vector是线程安全的,所以Vector比ArrayList的性能较低
②怎样将ArrayList变成一个线程安全的集合

```
   Collection c=Collections.synchronizedCollection(new ArrayList<>());
   List list=Collections.synchronizedList(new ArrayList<>());
   Set s = Collections.synchronizedSet(new HashSet());
   Map m=Collections.synchronizedMap(new HashMap<>());

``

③Vector还提供了一个stack类
④固定长度的List:Array.ArrayList(不允许增加、删除该集合里的元素)
⑤LinkedList:是List接口的实现类,也实现了Deque接口
三、Queue集合:用于模拟队列的这种数据结构
注:boolean offer(Object e):将指定元素加入此队列的尾部,当使用有容量限制的队列时。此方法通常比add(Object e)方法更好
a)priorityQueue:(Queue的一个实现类)
可以将队列中的元素从大到小排序
不允许插入null元素
两种排序方式:采用自然排序(需要实现Comparable接口),必须是同一个类的实现类
定制排序:传入一个Comparator对象
b)Deque接口(是Queue的一个接口)
代表了一个双端队列,允许从两端来操作队列的元素
ArrayDeque(Deque的实现类):基于数组实现的双端队列

各种线性表的性能分析
四、Map接口的两个典型的实现类HashMap和Hashtable
1.二者典型的区别:
①Hashtable是一个线程安全Map实现,但Hashmap是线程不安全的
②Hashtable不允许使用null作为key或value,如果放进去就会引发NullPointerException异常;但HashMap允许使用null作为key或者value
2.共同点:与Hashset一样不能保证元素的顺序一样
3.LinkedHashMap是HashMap的子类:可以保证元素的存取一致
4.EnumMap:key都必须是单个枚举类的枚举值
五、Map接口的子接口------>SortedMap-------->(实现类)TreeMap(红黑树结构)
TreeMap可以保证key-value处于有序状态(自然排序、定制排序)
Treemap判断key相同的标准是:compareTo()方法返回0,则TreeMap认为这两个key相同
注:什么是强引用:例如HashMap中,只要HashMap对象不被销毁,那么key所引用的对象就不会被垃圾回收
六、HashMap的数据结构:由数组和链表组成的,数据结构i又叫“链表-----散列”
1.HashMap的特点
①快速存储
②快速查找
③可伸缩:单线列表如果长度超过8的话会变成红黑树
2.hashmap 的hash算法
在java中所有的对象都有hashcode(使用key)如果使用Object对象get hashcode的话会得到一个int类型的值,我们在计算时,主要是用他的key去计算他的值
3.hash值的计算(hashcode)^(hashcode>>>16)
4.数组下标=hash%16;
5.哈希冲突会产生单线链表
6.hashmap的底层扩容原理:扩容(数组长度变成2倍)
触发条件:数组存储达到了75%
七、接口和抽象类的区别:
1.接口里只能包含抽象方法,不包含已经提供实现的方法,抽象类则完全可以包含普通ff
2.接口里不能定义静态方法,抽象类里可以定义静态方法
3.接口里只能定义静态类常量Filed,不能定义普通Filed,抽象类静态,普通均可
4.接口里不能包含构造器,抽象类可以包含构造器
5.接口里不能有初始化块;但抽象类则完全可以包含初始化块
6.一个类最多只能有一个直接父类、包含抽象类,但是一个类可以实现多个接口,弥补了java单继承的不足。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值