java 集合归类
对java的集合一直是停留在使用的角度,没有进行系统的归纳,趁现在比较空闲,归纳一下。
1 集合的层次关系
最顶层的有三个集合,其中一个类,两个接口, 一个类是Arrays,两个接口是Collection和Map
Arrays将数字和对象联系起来。
Collection的直接接口有List, Set,Queue。 Arraylist, Vector扩展了抽象类AbstractList,并且实现了List接口, LinkedList实现了AbstractSequentialList,并且实现了Queue和List接口。stack扩展自Vector类,set的之类有hashset和treeset, LinkedHashSet是对HashSet的扩展,同理,LinkedHashMap是对HashMap的扩展。
LinkList实现了queue接口, 所以有poll, offer等功能。ArrayList中有两个成员变量,E[]和size, LinkedList有两个成员变量,Entry<E> header 和size, Entry就是LinkedList的节点类型,它有三个成员变量,data, Entry<E> next, Entry<E> previous。 两种List都有indexof, lastindexof等功能,这和String类比较相似,所以从某种意义上说,String是ArrayList<Char>类型的结构,因为都是对一个数组的封装。ArraysList默认size是10,再次扩容为上次的50%,LinkedList的header节点的previous放的是最后一个节点的节点的引用,所以也可以说LinkedList是环形链表。
Stack, Vector, HashTable都是线程安全的,《java编程思想》中建议不要再使用,不知道什么原因,可能是大多数情况下不需要考虑线程安全,需要的时候,可以使用Collections.synchronizedList(new ArrayList())来替代, stack用LinkedList代替,HashTable用HashMap替代,Vector用ArraysList替代。
其中Collection extends Iterable, Iterable只有一个成员变量Iterator<T>, 而Arrays和Map没有扩展Iterable接口,所以只有Collection的之类才能包含Iterator, 但是Map中的values(),keySet()等方法能使用Iterator,是因为这些方法返回的是Collection的集合。
2 各个集合的特点(来自java编程思想)
- List. ArrayList 和LinkedList都是按照被插入的顺序保存元素,在性能上,ArrayList利用索引号访问集合元素,所以比较适合随机访问元素;LinkedList基于链表的结构,在插入和删除方面性能比ArrayList高,并提供了顺序访问的优化,在顺序访问上,性能和ArrayList相差无几,但是随机访问方面比较慢。
- Set. HashSet, TreeSet, LinkedHashSet,set是不重复的, 获取最快的是HashSet,但是不按照存放先后进行存储; TreeSet会按照比较结果的升序保存对象;LinkedHashSet按照被添加的顺序保存对象。
- Map. HashMap, TreeMap, LinkedMap, 与Set一样, HashMap提供了最快的查询速度,TreeMap提供了按照比较结果的升序进行保存key值,LinkedHashMap按照插入的顺序保存Key, 并且保存了HashMap的查询速度。
java 集合归类的更多相关文章
- Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]
Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 @author Trinea 原文链接:http://www.trinea.cn/android/arrayl ...
- JAVA 集合 List 分组的两种方法
CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...
- 入职大厂,齐姐精选的 9 道 Java 集合面试题
Java 集合框架其实都讲过了,有一篇讲 Collection 的,有一篇讲 HashMap 的,那没有看过的小伙伴快去补下啦,文末也都有链接:看过的小伙伴,那本文就是检测学习成果的时候啦 今天这篇文 ...
- 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.*; /* * ...
随机推荐
- Android要点记录
1.Toolbar不能上滑隐藏的原因<!--如果在CoordinatorLayout加上android:fitsSystemWindows="true",而不是在AppLay ...
- robotframework笔记23
远程库接口 远程库接口提供了对在测试库 比机器人框架本身是在不同的机器上运行, 同时实现图书馆使用其他语言比 本机支持Python和Java. 为一个测试库用户远程 library看起来几乎一样的其他 ...
- js匿名函數
(function($){})(jquery) == (function($){})(jQuery) 实际上是匿名函数 用于存放开发插件的代码 作用(非常有用): 这种写法的最大好处是形成闭包.在(f ...
- jsp有关resquest与session和application的区别和相似性
1. request 的setAttribute与getAttribute方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过 getAttribute方法根据属性获 ...
- webform工程中aspx页面为何不能调用appcode文件夹下的类(ASP.NET特殊文件夹的用法)
App_code 只有website类型的工程才有效. App_Code 下创建的.cs文件仅仅是“内容”不是代码.你设置那个文件为“编译”就行了. 其他特殊文件夹 1. Bin文件夹 Bin文件夹包 ...
- 再谈HTML
关于WEB 采用B/S计算模式开发的应用程序我们一般称为Web应用程序. WEB三大层面: 网页的结构部分:结构的定义使用HTML语言(超文本标记语言Hyper Text Mark Up Langua ...
- json小例子
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8 ...
- Android 主页面顶部栏的通知Notification ,可以自定义通知消息栏的风格,并且点击通知栏进人本程序。
常用的程序通知,显示到主页面的顶部栏. package com.lixu.tongzhi; import android.app.Activity; import android.app.Notifi ...
- 优化MYSQL数据库的方法
1.选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如'省份,性别',最好设置为ENUM2.使用连接(JOIN)来代替子查询: a.删除没有任何订单客户:DELETE ...
- Jquery easyui datagrid 导出Excel
From:http://www.cnblogs.com/weiqt/articles/4022399.html datagrid的扩展方法,用于将当前的数据生成excel需要的内容. 1 <sc ...