Java集合综述
来源:互联网 发布:光的双缝干涉实验 知乎 编辑:程序博客网 时间:2024/05/18 17:23
目录
一、前言
二、框架图
三、代码展现
—————————————————————————————————————-
一、前言
在书写程序的时候,我们常常需要对大量的对象引用进行管理。为了实现有效的归类管理,我们常常将同类的引用放置在同一数据容器中。
由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都要能能提供方便的查询、遍历、修改等基本接口功能。
早期的OOP语言都通过数组的方式来实现对引用集的集中管理和维护。
但是数组方式下,数组大小需要提前被确定,并不允许修改大小,导致其作为一种灵活的数据容器的能力的功能大为下降。
为了方便的利用数据容器进行引用的管理,Java中提供了丰富的数据容器以满足程序员多样化的需求。
二、框架图
JAVA的容器—List,Map,Set
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
!其中的Vector和Stack类现在已经极少使用。
从容器类图中可以发现,数据容器主要分为了两类:
Collection: 存放独立元素的序列(单链)。
Map:存放key-value型的元素对(双链)。(这对于一些需要利用key查找value的程序十分的重要!)
从类体系图中可以看出,Collection定义了Collection类型数据的最基本、最共性的功能接口,而List对该接口进行了拓展。
—————————————————————————————————————–
其中各个类的适用场景有很大的差别,在使用时,应该根据需要灵活的进行选择。此处介绍最为常用的四个容器:
LinkedList :其数据结构采用的是链表 ,此种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。
ArrayList:其数据结构采用的是线性表 ,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。
HashSet: Set类不允许其中存在重复的元素(集),无法添加一个重复的元素(Set中已经存在)。HashSet利用Hash函数进行了查询效率上的优化,其contain()方法经常被使用,以用于判断相关元素是否已经被添加过。(数据无序)
HashMap: 提供了key-value的键值对数据存储机制,可以十分方便的通过键值查找相应的元素,而且通过Hash散列机制,查找十分的方便。
————————————————————————————————————————-
此处介绍不常用的五个容器:
TreeSet:是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。
LinkedHashSet:是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
HashMap:是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null。
TreeMap:实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
LinkedHashMap :LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。
三、代码展现
Java中ArrayList和LinkedList区别
http://blog.csdn.net/silentwolfyh/article/details/70787815
ArrayList:按照插入的顺序保存数据
import java.util.ArrayList;public class ArrayListTest { public static void main(String[] args) { ArrayList<String> alist = new ArrayList<String>(); alist.add("I "); alist.add("am "); alist.add("程序猿"); System.out.println(alist); }}结果:[I , am , 程序猿]
TreeSet:插入值之后,打印出来有序
import java.util.Random;import java.util.Set;import java.util.TreeSet;public class TreeSetTest { public static void main(String[] args) { Random rand = new Random(47); Set<Integer> intset = new TreeSet<Integer>(); for(int i = 0; i<1000;i++) intset.add(rand.nextInt(30)); System.out.println(intset); }}结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
HashSet:没有重复值,且无序
import java.util.HashSet;import java.util.Random;import java.util.Set;public class HashSetTest { public static void main(String[] args) { Random rand = new Random(47); Set<Integer> intset = new HashSet<Integer>(); for(int i = 0; i<1000;i++) intset.add(rand.nextInt(30)); System.out.println(intset); }}结果:[24, 1, 2, 3, 4, 29, 5, 6, 7, 25, 8, 9, 18, 10, 11, 27, 12, 13, 0, 22, 14, 15, 16, 17, 19, 20, 21, 23, 26, 28]
迭代器:遍历所有数据
import java.util.Iterator;import java.util.Random;import java.util.Set;import java.util.TreeSet;public class IteratorTest { public static void main(String[] args) { Random rand = new Random(47); Set<Integer> intset = new TreeSet<Integer>(); for(int i = 0; i<1000;i++) intset.add(rand.nextInt(30)); display(intset.iterator()); } public static void display(Iterator<Integer> iterator){ while(iterator.hasNext()){ Integer inext = iterator.next(); System.out.print(inext+ " "); } }}结果:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
如果您喜欢我写的博文,读后觉得收获很大,不妨小额赞助我一下,让我有动力继续写出高质量的博文,感谢您的赞赏!!!
- java 集合框架综述
- Java集合框架综述
- Java集合框架综述
- Java集合综述
- Java集合框架综述
- Java集合框架综述
- Java集合框架综述
- Java集合综述
- JAVA集合框架综述
- Java集合框架综述
- Java集合框架综述
- Java 集合框架综述
- java集合类案例综述
- Collection--Java中的collection(集合)接口综述
- java集合类(一)综述
- Java基础-集合框架1 综述
- java综述
- Java综述
- Unity之DOTweenPath轨迹移动
- jaxb的优点和用法
- HDU 1037 Keep on Truckin'
- 个人对python装饰器的理解
- 应用程序调试(四)————自制系统调用、编写进程查看器
- Java集合综述
- 客户端获取url传参对象的值
- 解决Ubuntu14.04下Sublime Text 3无法输入中文
- [BZOJ1452][JSOI2009]Count(二维树状数组)
- vue+websocket+express+mongodb实战项目(实时聊天)(一)
- 导入android studio 项目错误:Error:(1, 0) Plugin with id 'com.android.application' not found
- TensorFlow入门教程集合
- Linux I2C device driver
- PHP删除数组指定值时unset()和array_slice()区别