JAVA 集合随笔
JAVA中提供了现成操纵数据的集合,使得我们在开发中基本不用自己动手实现复杂的数据结构,来保存和操纵数据。
所以当我们有了基本的数据结构知识,会合理利用JAVA提供的集合就好啦。
JDK1.8;(仅列举常见的)
一:
Iterable接口:三个方法;
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
Collection接口:主要的三个子接口 List Set Queue。同时继承了Iterable接口。
Map接口:主要的抽象类 AbstractMap ;AbstractMap 主要的实现类:HashMap;TreeMap;
LinkedHashMap继承了HashMap;
接口ConcurrentMap 继承了AbstractMap ; ConcurrentHashMap继承了AbstractMap,实现了ConcurrentMap 。
Collections:实现一些集合操作的类。
二:
List:主要实现ArrayList(数组实现);LinkedList(链表实现);Vector(线程安全:synchronized关键字实现);Stack(继承Vector);
Set:主要实现HashSet(无序不可重复);TreeSet(红黑树实现);LinkedHashSet;
Queue:https://www.cnblogs.com/lemon-flm/p/7877898.html ;
三:
Map:ConcurrentHashMap(分段锁);TreeMap(红黑树);HashMap(散列表);Hashtable(synchronized线程安全);Properties(继承Hashtable);
四:
List特点:有序,允许存放重复元素,允许存入null。
ArrayList: 采用数组实现,查询快,删除慢(例:删除数组中间的元素,数组后部的元素全部得往前移动)。
LinkedList:采用链表实现,是一个双向循环列表,具有prev,next,尾元素的next指向头;头元素的prev指向最后一个元素。删除快(直接断开链接即可),查询慢(需要从头部开始遍历查找。)
其中LinkedList还实现了Deque接口,所以可以当成一个非阻塞队列使用,满足先进先出,一端进另一端出的队列特点。
Vector:是采用数组实现的,其中插入,删除,查询等方法全部加上了synchronized关键字,实现线程安全。
Set特点:无序,不可存放重复元素,允许存入null。
HashSet:底层是包装一个HashMap实现的。HashSet判断存入的元素是否重复,是通过元素的equals()方法,和hashCode()方法判断的。无序
LinkedHashSet:就是加了链表的HashSet,可以通过链表维护插入顺序,故可以维持“插入顺序”。
TreeSet:底层是包装了一个TreeMap实现的。采用红黑树实现,红黑树本身是一个近似平衡的二叉搜索树。
且TreeSet 实现了 NavigableSet<E> 接口 ,NavigableSet 继承了 SortedSet<E>,故TreeSet 是一个排序的set。
Java 中 实现比较:Comparable接口以及Comparator接口。所以TreeSet有两种判断排序的方式,1:存入元素实现Comparable接口。2.传入实现Comparator接口的比较器。
Map特点:提供了键值的映射,key-value的模式;
HashMap:散列表实现(详见我的另一篇:https://www.cnblogs.com/dev1ce/p/10627395.html)。
未完待续;
JAVA 集合随笔的更多相关文章
- 关于Java集合
之前关于java集合认识,虽然理解,但是总是忘记关键点,今明两天写一篇关于集合的随笔
- Java基础 随笔整理
Java基础随笔整理 为了方便阅读,特整理了相关的学习笔记 Java感想 操千曲而后晓声 Java入门 Java其他 Java虚拟机详解 语言入门百题 Java开发工具 · Eclipse Java语 ...
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- Scala集合和Java集合对应转换关系
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...
- java集合你了解多少?
用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...
- 深入java集合学习1-集合框架浅析
前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- Java集合框架练习-计算表达式的值
最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
随机推荐
- 30-Transformation(HDU4578)-区间线段树(复杂)
http://acm.hdu.edu.cn/showproblem.php?pid=4578 Transformation Time Limit: 15000/8000 MS (Java/Others ...
- mac上,sudo启动IDEA
cd /Applications/IntelliJ IDEA 14.app/Contents/MacOS sudo ./idea # 就是这个启动,我一开始没有找到这个启动项...这样你就能运行80端 ...
- Openssl base64命令
一.简介 对文件件进行base64的编码与解码 二.语法 openssl base64 [-in filename] [-out filename] 三.实例 1.二进制文件与base64编码互转 o ...
- 178. Rank Scores - database - 178. Rank Scores (Oracle)
题目链接 https://leetcode.com/problems/rank-scores/description/ 题意:对所有的分数按照降序进行排序,查询出分数和排名,排名相同的输出相同名 ...
- 回顾2017系列篇(五):人工智能给UI/UX设计带来的影响
如今,我们正处于设计新纪年的转折点上,用机器人和人工智能方面的专家说法表达即“The end is near(终点近了)”.但这并不意味着世界末日,但未来机器人将毫无疑问地接管一部分目前被人类占领的工 ...
- [原创]SOUI GDI+渲染引擎下的字体特效,抛砖引玉
由于SOUI是一种双渲染引擎的DUI库,默认在SKIA渲染引擎下是支持特效字体的,具体请参考DEMO中的源码. 但是使用GDI+渲染时是没有这些特效的,着实比较苦恼,此代抛砖引玉,细节实现 请自己再去 ...
- Photo4
Story: 我手捧玫瑰,一个人,走在桥上.桥下是波澜壮阔的大海,一不小心,我就有失足的危险.海鸟的低鸣在我耳际盘旋着,浪汹涌,仿佛要把我吞噬掉.你也许奇怪,为何我一人手捧玫瑰走在桥上.只因,女骑从来 ...
- getparameter()和getattribution()的区别的 java详细
两个Web组件之间为转发关系时,转发源会将要共享 request范围内的数据先用setAttribute将数据放入到HttpServletRequest对象中,然后转发目标通过 getAttribut ...
- 4.4.3 Java中的指针:Unsafe类
java多线程编程的无锁CAS底层都是通过 Unsafe进行操作的:源码如下 public final boolean compareAndSet(int expect, int update) { ...
- python操作mysql数据库系列-安装MySQLdb
一波三折,先是pip命令出现问题,然后各种方法尝试解决.然后是直接使用pip2命令安装报错,mysql-python库安装再次出现问题.于是使用国内镜像的方式去安装:pip2 install MySQ ...