Java 集合类图


有序否


允许元素重复否


Collection




List




Set


AbstractSet




HashSet


TreeSet


是(用二叉树排序)


Map


AbstractMap



使用key-value来映射和存储数据,Key必须惟一,value可以重复


HashMap


TreeMap


是(用二叉树排序)

4、详细介绍

常用的类介绍

Collection:父接口; 
Set:接口 ---实现类: HashSet、LinkedHashSet
List:接口---实现类: LinkedList,Vector,ArrayList 
SortedSet:接口---实现类:TreeSet

Map接口---实现类:HashMap、Hashtable、LinkedHashMap、Properties

1、List: 
List:有序列表,允许存放重复的元素; 
实现类: 
ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;
LinkedList:链表实现,增删快,查询慢 
Vector:数组实现,线程安全,重量级

例:

levit应用中使用集合分布表:

集合类型 应用数量
ArrayList 184处
LinkedList 2处
Vector 0

分析:

从以上的分析结果来看ArrayList是用的最多的,Vector没有用到(有性能问题,不建议使用)。

下面分析一下应用LinkedList场景的代码:


private List<Long> getGroupIds(List<GroupMemberDO> groupMemberDOs) {

List<Long> groupIds = new LinkedList<Long>();        if (CollectionUtils.isEmpty(groupMemberDOs)) {            return groupIds;

}

//后台任务调用该方法,此场景数据量很大,外面循环的集合类型是ArrayList(查询快),对查询出的数据保存应用LinkedList(增加快)。        for (GroupMemberDO groupMemberDO : groupMemberDOs) {

//此处只做增加操作,上面分析LinkedList是基于链表他做增加删除很快。            groupIds.add(groupMemberDO.getGroupId());

}        return DistinctElementFilter.filterList(groupIds);

}

在实际开发根据业务场景选择相应的集合类。
2.Set:
无序集合,不允许存放重复的元素;允许使用null元素

HashSet 的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问; 如果有两个Key重复,那么会覆盖之前的; 

实现类 HashSet:equals返回true,hashCode返回相同的整数;哈希表;存储的数据是无序的。

实现类LinkedHashSet:此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

哈希表详解:

http://www.bianceng.cn/Programming/sjjg/200705/1126.htm

例:

levit应用中使用集合分布表:

集合类型 应用数量
HashSet 3处
LinkedHashSet 0

分析:

从以上的分析结果来看没有应用到LinkedHashSet,HashSet应用3处下面代码分析业务场景代码:

Set<String> identities = new HashSet<String>();
 identities.add(VAccountIdentity.TP_ENTERPRISE); 
identities.add(VAccountIdentity.FREE_PENDING); 
identities.add(VAccountIdentity.TP_BUYER); 
以上代码不允许元素重复。

不允许集合中有重复的数据可以选择HashSet。

子接口SortedSet,对Set排序实现类 :TreeSet:使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序;二叉树实现的;

二叉数的定义:

http://www.comp.nus.edu.sg/~xujia/mirror/algorithm.myrice.com/datastructure/basic/binary_tree/chapter1.htm

 Levit应用目前没有业务场景就用该集合。

3、Map
HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;允许null的键或值;
Hashtable:线程安全的,不允许null的键或值;
Properties::key和value都是String类型,用来读配置文件;

TreeMap:对key排好序的Map; key 就是TreeSet, value对应每个key; key要实现Comparable接口或TreeMap有自己的构造器;

LinkedHashMap: 此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

levit应用中使用集合分布表:

集合类型 应用数量
HashMap 142处
Hashtable 0
Properties 0
TreeMap 0
LinkedHashMap 3

分析:

从以上的分析结果来看与List的分析结果大致相同,HashMap应用场景最多。

以下分析LinkedHashMap应用场景的代码:

//此处要保证参数的顺序,采用LinkedHashMap. 
 Map<String, String> map = new LinkedHashMap<String, String>(); // 判断是从 "转帐、缴存、转出" 页面到成功页面的  map.put(TransferConstants.SC_SUCCESS_U, transferType); map.put("id", b); actionResult.setRedirectURL(getRender(TransferConstants.REDIRECT_SUCCESS, map));

Webx框架中使用Properties读取配置文件代码:

 /**
 * 装载和初始化Webx中的services。<p>该类可以通过listener或servlet来调用。</p>
 */public class WebxLoader implements WebxController, WebxConstant { private void configureLog4j(BootstrapResourceLoaderService resourceLoader, Properties props) {         //省略部分代码.................        // 如果配置文件名为*.xml,则使用DOMConfigurator,否则使用PropertyConfigurator。        String filename = log4jConfigurationURL.getFile();        if (filename.endsWith(LOG4J_CONFIGURATION_XML)) {
            DOMConfigurator.configure(log4jConfigurationURL, props);
        } else {
            props = new Properties(props);            try {                ////关键部分,读取文件到"props"集合中.---------------------------------------------------------------------------------------                props.load(log4jConfigurationURL.openStream());
                PropertyConfigurator.configure(props);
                log.info("Configured log4j from " + log4jConfiguration);
            } catch (IOException e) {                // 此时logging系统还不可用,记录到servlet log中                logLog("Could not open Log4j configuration file "
                       + log4jConfigurationURL.toExternalForm(), e);
            }
        }        // 现在可以开始打log了。        resourceLoader.setLoggerReady(true);
    }
}

4、两个工具类 Arrays 和 Collections
1.Arrays、此类包含用来操作数组(比如排序和搜索)的各种方法。

2.Collections、主要提供了在 collection 上进行操作的静态方法(同步集合类方法) 。
Arrays应用实例代码:

private void setGoodsList(ActionResult actionResult, GoodsDO[] goodsArray) {        
if (goodsArray != null) {            //将数组转换成集合类            
List<GoodsDO> goodsList = Arrays.asList(goodsArray);           
 ///省略代码......            
actionResult.putInContext("goodsList", goodsList);
            actionResult.putInContext("gev", gev);
        }
    }
时间: 2024-10-29 10:46:20

Java 集合类图的相关文章

Java 集合类详解

1.java集合类图 1.1 1.2 上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等. 发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法.它的一个

Java常见面试题(二)JAVA集合类

JAVA集合类图: 1. hashmap原理,与hashtable区别 Java中的HashMap是以键值对(key-value)的形式存储元素的.HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素.当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上.如果key已经存在了,value会被更新成新值.HashMap的一些重要的特性是它的容量(capacity),负载因子(load

一张图让你看清Java集合类(Java集合类的总结)

如今关于Java集合类的文章非常多,可是我近期看到一个非常有意思图片,基本上把Java集合的整体框架都给展现出来了.非常直观. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaWFtenAyMDA4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" align="middle" > 假设发现图片看不清楚.点此处看大图 在这里,

Java集合类的总结

现在关于Java集合类的文章很多,但是我最近看到一个很有意思图片,基本上把Java集合的总体框架都给展现出来了,很直观. 如果发现图片看不清楚,点此处看大图 在这里,集合类分为了Map和Collection两个大的类别. 处于图片左上角的那一块灰色里面的四个类(Dictionary.HashTable.Vector.Stack)都是线程安全的,但是它们都是JDK的老的遗留类,现在基本都不怎么使用了,都有了对应的取代类.其中Map是用来代替图片中左上角的那个Dictionary抽象类(Map的官方

Java集合类汇总记录--JDK篇

接口类图 Java Collection由两套并行的接口组成,一套是Collection接口,一套是Map接口.如下图 公共抽象类AbstractCollection 要求派生类实现iterator()方法,AbstractCollection根据得到的Iterator实现所有可以支持的方法,比如remove().contains().toArray().toString()等. 当然,Map系列的类并不从AbstractCollection派生. List实现 AbstractList 要求子

java 集合类源码分析--linkedlist

一.源码解析 1. LinkedList类定义2.LinkedList数据结构原理3.私有属性4.构造方法5.元素添加add()及原理6.删除数据remove()7.数据获取get()8.数据复制clone()与toArray()9.遍历数据:Iterator()二.ListItr 一.源码解析 1. LinkedList类定义. public class LinkedList<E> extends AbstractSequentialList<E> implements List

Java集合类之List,Set探究

Collection是一个顶层的接口,在集合类中还有Map也属于顶层接口(参考Java集合类之Map探究),本文通过一张类图描述List和Set的基本结构. 类图解析: Collection是一个顶层的接口,定义了一系列方法,List和Set是继承自Collection的接口. 每个Collection都可以产生一个Iterator(参考Java iterator与iterator模式),从而可以利用Iterator进行遍历. AbstractCollection是Collection的抽象实现

java集合类源码学习一

对于java的集合类,首先看两张图 这两张图大致描绘出了java集合类的总览,两个体系,一个Collection集合体系一个Map集合体系.在说集合类之前,先说说Iterable这个接口,这个接口在jdk1.8之前,里面只有一个方法Iterator<T> iterator(),即返回一个T类型的迭代器,在1.8增加了两个default修饰的方法 default void forEach(Consumer<? super T> action) { Objects.requireNon

Java集合类: Set、List、Map、Queue使用

目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量.一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,如果我们需要保存一个可以动态增长的数据(在编译时无法确定具体的数量),java的集合类就是一个很好的设计方案了. 集合类主要负责保存.盛装其他数据,因此集合类也被称为容