Java Collection框架—List\ set \map 的异同世界

Java集合是多个对象的容方法。集合(容方法),简单点,其实就是一个对象,能将具有相同性质的多个元素汇聚成一个整体。

Collections Framwork是用来表现和操纵集合的一个统一的体系结构。

常用的集合有HashMap,HashSet,ArrayList……,因为对于每一个集合的内涵都很模糊,所以才会导致自己不知道具体的使用环境。我们通过对比来区分异同:

Set(集)

Set可以说是一种最简单的集合,主要的两个实现类,HashSet,TreeSet,两者最大的区别就是TreeSet是有序的,而HashSet是无序的(详细请见后文分解)

以HashSet举例说明:

import java.util.HashSet;
import java.util.Set;
import java.util.*;

public class hashset {

    /**
     * 使用Set示例代码
     */
    public void hashSetExample() {

        Set vehicles = new HashSet();

        //Declare some string items
        String item_1 = "apple";
        String item_2 = "orange";
        String item_3 = "banana";

        boolean result;

        //把每个文件都使用set方法加入
        result = vehicles.add(item_1);
        System.out.println(item_1 + ": " + result);

        result = vehicles.add(item_2);
        System.out.println(item_2 + ": " + result);

        result = vehicles.add(item_3);
        System.out.println(item_3 + ": " + result);

        //再次尝试使用item_1
        result = vehicles.add(item_1);
        System.out.println(item_1 + ": " + result);
    }

    @SuppressWarnings("unchecked")  public static void main(String[] args) {
		new hashset().hashSetExample();
    }

}

最后输出的结果为:apple:true;orange:true;banana:true;apple:false,出现的原因就是因为咱们Set是不允许有重复元素出现的。

List(列表)

List相比而言,是常见的,List特征就是其元素是以线性方式存储,集合中可以存放重复的对象,当涉及到“栈”,“队列”,“链表”等时,都是使用List,其实也就是我们数据库结构使用的那些知识。

至于具体使用什么,也得视情况而定,比如:

ArrayList():适用于可以改变长度的数组,可以对元素进行随机的访问,只不过插入,删除元素的速度较慢;

LinkedList():主要用于链表数据结构,插入和删除速度是很快的,只是访问时的速度慢。

Vector():底层是数组数据结构 线程同步(数组长度是可变的百分之百延长)(无论查询还是增删都很慢,所以一般不常用,直接用ArrayList代替来使用了。

Map(映射)

Map<key,value>是一个双列集合,是一种把键对象和值对象映射的集合,有一个Key值和一个Value值,Key值代表唯一,所以不能重复;Value值是真正可以存储的变量,所以是可以重复的。Map没有继承于Collection接口,在Map集合中检索元素时,只要给出键对象,就能够返回对应的值。

对于Map而言,执行效率是一个大问题,常用的两个实现为:

HaspMap():Map基于散列表的实现,插入和查询“键值对”的开销是固定的,HashMap就是使用对象的HashCode来进行查询的,此方法能够显著提高性能

TreeMap():只要是Tree,他就一定是经过排序的,TreeMap是唯一带有SubMap()方法的,所以它可以返回一个子树。

Map-HashCode举例:

import java.util.*;     

public class hashcode {
     public static void main(String[] args){
          HashMap h2=new HashMap();
          for(int i=0;i<10;i++)
               h2.put(new Element(i), new result());
          System.out.println("h2:");
          System.out.println("Get the result for Element:");
          Element test=new Element(5);
          if(h2.containsKey(test))
               System.out.println((result)h2.get(test));
          else
               System.out.println("Not found");
     }
}
/* 这样运行结果为null,也就是得不到值 */
/* class Element{
     int number;
     public Element(int n){
          number=n;
     }
}     */
/* 更改方法如下: */
class Element{
     int number;
     public Element(int n){
          number=n;
     }
     public int hashCode(){
          return number;
     }
     public boolean equals(Object o){
          return (o instanceof Element) && (number==((Element)o).number);
     }
}   

class result{
     Random r=new Random();
     boolean possible=r.nextDouble()>0.5;
     public String toString(){
          if(possible)
               return "OK!";
          else
               return "Impossible!";
     }
}   

对于Element而言,前后两者的对比就是一个有返回值,一个没有返回值;HashCode方法是继承于Object的,因为Element在这里覆盖了hashCode()和equals()方法,这样是前后两个Key保持了一致,所以最终有了值返回。

对于HashCode而言,其实不必对每个不同的对象都产生一个唯一的HashCode,只要能够得到返回值就达到目的了;再者,对于HashCode,最好能够分散开,使用“分散原则”,有利于提高性能。

最后总结:

对于Collection需要了解的还有很多很多,这也只是冰山一角,通过对比学习,能够在使用的过程中得到最优解,这样才能使我们的系统性能优化,价格合理。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-15 07:54:54

Java Collection框架—List\ set \map 的异同世界的相关文章

【转】Java集合框架List,Map,Set等全面介绍

原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +--java.util.LinkedList [C]   +--java.u

Java Collection框架详解

引用自:http://blog.sina.com.cn/s/blog_6d6f5d7d0100s9nu.html 经常会看到程序中使用了记录集,常用的有Collection.HashMap.HashSet.ArrayList,因为分不清楚它们之间的关系,所以在使用时经常会混淆,以至于不知道从何下手.在这儿作了一个小例子,希望有助于帮大家理顺思路. 首先看一下它们的关系: Collection --List:-----------------------以特定次序存储元素.所以取出来的顺序可能和放

JAVA Collection接口中List Map 和Set的区别(转)

Java中的集合包括三大类,它们是Set(集).List(列表)和Map(映射),它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类.Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap. Collection是最基本的集合接口,声明了适用于JAVA集合的通用方法,list和set都继承自collection接口. Collection接口的方法 boolean add

我所理解Java集合框架的部分的使用(Collection和Map)

所谓集合,就是和数组类似--一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接口,长虚线表示抽象类,实线表示类,箭头表示实现接口或者继承)(在网络上找的图,不知道原作者,侵权请联系我删除)(总之,关系很复杂,所以不用记得这个图,只是用来吓吓人而已的). 下面贴上个人理解之精简版之Collection(集)和Map(地图?暂且这么理解吧),话说思维导图蛮好用,以下是两幅思维导图

初识Java集合框架(Iterator、Collection、Map)

1. Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 注意: 既有接口也有类,图中画实线的是类,画虚线的是接口 使用之前须要到导入java.util包 List和Set是Collection的子接口,ArrayList和LinkedList是List的两个实现类,HashSet和TreeSet是Set的两个实现类 重点:ArrayList.LinkedList和HashSet Map接口对应的集合是以K-V键值对的方式存储数据的,不同于Collection

Java集合框架--List、Set、Map

Java集合框架接口和类的层次结构: java.util.Collection [I] +--java.util.List [I] +--java.util.ArrayList [C] +--java.util.LinkedList [C] +--java.util.Vector [C] +--java.util.Stack [C] +--java.util.Set [I] +--java.util.HashSet [C] +--java.util.SortedSet [I] +--java.u

Java集合框架总结(5)——Map接口的使用

Java集合框架总结(5)--Map接口的使用 Map用于保存具有映射关系的数据(key-vlaue).Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false Map中包含了一个keySet()方法,用于返回Map所以key组成的Set集合. Map集合与Set集合元素的存储形式很像,如Set接口下有HashSet.LinkedHashSet.SortedSet(接口).TreeSet.EnumSet等实现类和子接口,而Map接口下则有HashMa

Java编程手冊-Collection框架(上)

该文章所讲内容基本涵盖了Collection里面的全部东西,尽管基于jdk 1.5的.可是思路非常清晰 1.引言 1.1 Collection框架的介绍 尽管我们能够使用数组去存储具有同样类型的元素集合(包含基本类型和对象类型),可是数组不支持所谓的动态内存分配,一旦分配之后,它的长度就是固定的,无法改变,另外,数组是一个简单的线性结构.在我们的实际开发中,可能会须要更复杂的数据结构.比如linked list, stack, hash table, sets, 或者 trees. 在Java中

Java集合框架中Map接口的使用

在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不是线性的存放对象的引用,Map接口提供了一种映射关系,所有的元素都是以键值对(Entry类型对象实例)的方式存储的,所以能够根据key快速查找value,key是映射关系的索引,value是key所指向的对象,注意,这里的value不是一个数值,而是一个对象的引用,Java集合框架的元素均是指对象!