JAVA常用集合
List:
- ArrayList: 基于动态数组的有序集合。优点:可以根据索引index下标访问List中的元素,访问速度快;缺点是访问和修改中间位置的元素时慢(数组尾部插入元素以外)。
- LinkedList: 基于双向链表的有序集合。优点:插入删除元素速度快,缺点:访问速度慢,只能遍历。
- CopyOnWriteArrayList: 也是基于数组的有序集合,优点:线程安全(ReetrantLock 加锁)。 适用于 多读少写的场景下。
- Vector: 基于数组的线程安全的集合。(方法被 synchronized修饰) 性能低于CopyOnWriteArrayList
线程安全的list List list = Collections.synchronizedList(new ArrayList()); 注:该方法通用于collection集合
Set:
- HashSet: 基于HashMap的不允许重复,允许null值的线程不安全的Set集合(遍历顺序基于HashCode)
- TreeSet:SortedSet接口的实现类,顾名思义该Set集合是有序的(按照自然顺序排序或者自定义顺序排序),不允许null的非线程安全的集合(基于HashMap)
基于红黑树的数据结构排序。不能依靠自然顺序排序的对象,需要实现Comparable接口的ComparaTo()方法 或者创建TreeSet时实现Comparator接口的compare()方法
- LinkedHashSet:基于链表的Set集合,保证了元素的插入顺序。基于链表的基础,插入和删除元素速度快。
- EnumSet: 操作效率最高的Set集合,只能存储某个枚举类的值。
线程安全: ConcurrentHashSet(基于ConcurrentHashMap) ; Set set = Collections.synchronizedSet(new HashSet());
Map:
- HashMap: 其键值均可存储null的非线程安全的集合
- Hashtable: 键值均不可是null的线程安全集合 (线程安全是方法基于syschnoized关键字)
- ConcurrentHashMap: 线程安全的HashMap (与Hashtable 区别是 ConcurrentHashMap使用的分段锁的操作 默认应该是16,每个分段上使用Lock锁) 键值都不允许null值
- TreeMap: 常见的Map集合 针对key 按照从小到大进行了排序
// 默认是从小到达顺序, 此处重写了Compara方法,使其按照从大到小的顺序排列
Map map = new TreeMap(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
map.put("a","abc");
map.put("c","cde");
map.put("b","bde");
for(Object s:map.keySet())
{
System.out.println(s + "=" + map.get(s));
}
- LinkedHashMap 基于双向链表的和hash值的实现的map.其特点是保证了map的存取顺序。
Queue:
- PriorityQueue 基于动态数组的按照元素的大小自然排序的,不允许null值的队列
- PriorityBlockingQueue 线程安全的队列
- ArraryDeque 基于动态数组的双向队列,不允许有null值(根据null判断元素是否存在的依据)
可以基于ArrayDeque实现队列(FIFO)的操作. 栈的操作也可以使用ArrayDeque实现(LIFO) 只需要在队列尾部进行增加和删除的操作
public class DequeTest<T> { public static void main(String[] args) {
//队列 先进先出FIFO
DequeTest dt = new DequeTest(5);
dt.push(5);
dt.push(3);
dt.push(9);
dt.push(7);
dt.push(2);
dt.push(6);
while(dt.size() > 0)
{
System.out.print(dt.pop() + " ,");
}
System.out.println("\n");
dt.push(7);
dt.push(2);
dt.push(6);
while(dt.size() > 0)
{
System.out.print(dt.pop() + " ,");
} } private ArrayDeque<T> deque = new ArrayDeque<T>();
private int size; public DequeTest(int size){
this.size = size;
} public boolean push(T obj){
if(deque.size() + 1 > this.size)
{
return false;
}
return deque.offerLast(obj);
} public T pop(){
return deque.pollFirst();
} public T peak(){
return deque.peekFirst();
}
public int size(){
return deque.size();
}
}
JAVA常用集合的更多相关文章
- Java常用集合笔记
最近事情比较少,闲暇之余温习巩固一下Java的一些基础知识,并做一些笔记, Java常用集合, 主要参考的这篇文章:Java常用集合 ArrayList/Vertor 1. ArrayList 的主要 ...
- java常用集合详解 contains
java集合是对常用数据集合的封装,差不多就是数组吧,验证某个元素是否在数据集合里,最原始的方法是,用个循环,"某个元素"与数据集合中的每个元素逐个进行比较. java 对常用的一 ...
- JAVA常用集合源码解析系列-ArrayList源码解析(基于JDK8)
文章系作者原创,如有转载请注明出处,如有雷同,那就雷同吧~(who care!) 一.写在前面 这是源码分析计划的第一篇,博主准备把一些常用的集合源码过一遍,比如:ArrayList.HashMap及 ...
- JAVA 常用集合接口List、Set、Map总结
java中频繁使用List.Set.Map接口,将其总结如下 它们的继承与实现关系如下: Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└ ...
- 链表与哈希表基本概念及Java常用集合
-链表- 是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个 ...
- Java图书管理系统(用Java常用集合实现)
图书管理系统 一.需求说明 1.功能:登录,注册,忘记密码,管理员管理,图书管理. 2.管理员管理:管理员的增删改查. 3.图书管理:图书的增删改查. 4.管理员属性包括:id,姓名,性别,年龄,家庭 ...
- java常用集合总结
1.线程安全 线程安全就是说多线程访问同一代码,不会产生不确定的结果. 2.List类和Set类List类和Set类是Collection集合接口的子接口.Set子接口:无序,不允许重复.List子接 ...
- Java常用集合学习总结
一 数组 数组可以存储基本数据类型和对象的一种容器,长度固定,所以不适合在对象数量未知的情况下使用. Arrays : 用于操作数组对象的工具类,里面都是静态方法. Arrays.asList:把A ...
- java 常用集合list与Set、Map区别及适用场景总结
转载请备注出自于:http://blog.csdn.net/qq_22118507/article/details/51576319 list与Set.Map区别及 ...
- 面试突击(五)——Java常用集合
为了勾起回忆,我画了一个常用集合类的结构关系图,话不多说,详见下图: 实际开发中ArrayList/HashMap/HashSet是三种最常用的集合工具类,通过其结构关系图也能清晰的了解他们的特性,所 ...
随机推荐
- SpringBoot之配置
回顾 SpringBoot之基础 配置文件 ① 两种全局配置文件(文件名是固定的) 配置文件放在src/main/resources目录或者类路径/config下 application.proper ...
- document.compatMode 浏览器渲染模式判定利器
在加了DOCTYPE的页面document.compatMode输出CSS1Compat,不管加的是XHTML的还是HTML5的DOCTYPE.没有加的输出BackCompat. BackCompat ...
- Day05 -寻找自己:Ruby的self物件与singleton method
前情提要:在第四天里,我们用参赛者的例子解说实体方法与类别方法.类别中的实体物件,想要玩弄方法时,可以有三种取用方式:(跟斯斯有三种一样) 该类别所定义的实体方法. 模块中可取得的实体方法.(关于模块 ...
- ucos中的中断管理
一.中断的概念 中断是一种硬件机制,用于处理异步事件.中断的实时性比轮询要好,通过中断,微控制器可以在异常发生的时候立刻进行处理,而不需要不断轮询事件是否发生. CM3支持中断嵌套,使得高优先级异常可 ...
- 我的第一篇java笔记
什么是程序 程序通常指完成某些事物的一种既定方式和过程. 在日常生活中,可以把程序看成一系列动作的执行过程和描述. Java介绍 Java是Sun Microystems于1995年推出的高级编程语言 ...
- myhabits where in foreach
myhabits传入参数:类,其中类中包含字符串数组String[] 当查询where in String[]时 <select id="selectData" parame ...
- oracle优化(一)
非原创 1. 选用合适的ORACLE优化器 ORACLE的优化器有3种: a. RULE(基于规则)b. COST(基于成本) c. CHOOSE(选择性) 选择缺省的优化器,可以通过对init.or ...
- iOS内置麦克风选择方法
模式中的 voicechat用于VoIP是由系统进行默认选择的最适合的麦克风 模式中的AVAudioSessionModeVideoRecording默认选择上麦克风,离摄像头最近的那个,主要用于VO ...
- python 聊天程序(基于UDP)
from threading import Thread from socket import * updSocket = socket(AF_INET,SOCK_DGRAM) updSocket.b ...
- leetcode1:两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 实例: 给定 nums = [2, 7, 11, 15],target = ...