Java基础
1.1 集合
Java的集合被定义在Java.util包中,主要有四种集合,分别为list,queue,set和map,每种集合的具体分类:
list: ArrayList,LinkList, Vector;
queue :ArrayBlockingQueue, linkdBlockingQueue, PriorityBlockingQueue, DeloyQueue;
set: HashSet, linkHashSet, TreeSet
Map: HashMap, HashMap, TreeMap;
1.1.1 List:可重复
List是非常重要的数据类型,是有序的Collection,一共有三个实现类,分别是ArryList,Vector,LinkedList.
1.ArryList:基于数组实现增删慢,查快,线程不安全
ArryList 是使用最广泛的list的实现类,其内部的数据结构是基于数组实现的,提供了对List的增加(add),删除(remove)和访问(get)功能。
Arrlist的缺点是对元素必须是连续存储,当需要向中间插入或删除数据时需要等待所有元素进行完,所以不适合随机的增删,适合随机的查找;
ArryList不需要定义数组长度,在长度不满足存储要求是会自动创建更大的数组将其已有数据复制到新数组。
2.Vector:基于数组实现增删慢,查快,线程安全
vector的数据库结构和ArryList一样,都是基于数组实现的,不同的是vector支持线程同步,同一时刻只允许一个线程进行读写操作来保证多线程下的数据一致性,但需要频繁vector实例进行加索的释放操作,因此,vector读写相对较慢;
3.LinkedList:基于双向链表实现,增删快,查慢,线程不安全
LinkedLIst采用的是双向链表对随机插入,删除数据相对较快,对数据的查找相对就慢;
##1.1.2Queue
queue是队列结构,Java常用一下结构;
ArrayBlockingQueue:基于数组结构实现的有界阻塞队列;
linkdBlockingQueue:基于链表数据结构实现的有界阻塞队列;
PriorityBlockingQueue:支持优先级排序的无界阻塞队列;
DeloyQueue:支持延时操作的无界阻塞队列;
## 1.1.3set:不可重复
Set核心是独一无二的性质,适用于存储无序且值不相等的元素。如果想要比较两个对象是否相等,则必须同时覆盖对象的hashCode方法和 equals方法,并且hashCode方法和 equals方法的返回值必须相同。
- HashSet: HashTable 实现,无序
HashSet存放的是散列值,它是按照元素的散列值来存取元素的。元素的散列值是通过元素的 hashCode方法计算得到的,HashSet首先判断两个元素的散列值是否相等,如果散列值相等,则接着通过equals 方法比较,如果 equls方法返回的结果也为true,HashSet就将其视为同一个元素;如果 equals方法返回的结果为false,HashSet就不将其视为同一个元素。- TreeSet:二叉树实现
TreeSet基于二叉树的原理对新添加的对象按照指定的顺序排序(升序、降序),每添加一个对象都会进行排序,并将对象插入二叉树指定的位置。
- TreeSet:二叉树实现
- LinkHashSet: HashTable 实现数据存储,双向链表记录顺序
LinkedHashSet 在底层使用LinkedHashMap存储元素,它继承了HashSet,所有的方法和操作都与hashSet相同。1.1.4 Map
- HashMap:数组+链表存储数据,线程不安全
HashMap基于键的 HashCode值唯一标识一条数据,同时基于键的HashCode值进行数据的存取,因此可以快速地更新和查询数据,但其每次遍历的顺序无法保证相同。HashMap 的key 和 value允许为null。 - ConcurrentHashMap:分段锁实现,线程安全
与HashMap不同,ConcurrentHashMap采用分段锁的思想实现并发操作,因此是线程安全的。ConcurrentHashMap由多个Segment组成( Segment 的数量也是锁的并发度),每个Segment 均继承自ReentrantLock 并单独加锁.所以每次讲行加锁操作时锁住的都是一个Sepment这样保证了每个线程的安全,也就实现了全局的线程安全 - HashTable:线程安全
HashTable是遗留类,很多映射的常用功能都与 HashMap类似,不同的是它继承自Dictionary类,并且是线程安全的,同一时刻只有一个线程能写HashTable,并发性不如ConcurrentHasbMap。