Java中集合的讲解

原创 2017年01月02日 23:48:48

问题:
1、什么是集合
2、集合重用的有哪几种
3、集合中HashSet的存储样例
4、集合的遍历方法

集合:存储对象数据的集合容器

单例集合
——–| Collection 单例集合的根接口
————-|List 如果是实现了List接口的集合类,具备的特点:有序,可重复
—————-|ArrayList ArrayList底层是使用了Object数组实现的,特点:查询速度快,增删慢
—————-|LinkedList LinkedList底层是使用了链表数据结构实现的,特点:查询速度慢,增删快
—————-| Vector 底层是使用了Object数组实现的,实现原理与ArrayList是一致的,但是是线程安全的,操作效率低

————-|Set 如果是实现了Set接口的集合类,具备的特点:无序,不可重复
—————-|HashSet 底层是使用了哈希表实现的, 特点:存取速度快

HashSet存储元素的原理
往HashSet添加元素的时候,首先会调用元素的HashCode方法得到元素的哈希码值,然后把哈希码值经过运算算出该元素存在哈希表中的位置
情况1:如果算出的位置目前还没有存在任何的元素,那么该元素可以直接添加到哈希表中
情况2:如果算出的位置目前已经存在其他的元素,那么还会调用元素的equals方法再与这个位置上的元素比较一次
如果equals方法返回的是true,那么该元素被视为重复元素,不允许添加,如果equals返回的是false,那么该元素也可以被添加
—————-|TreeSet 底层是使用了红黑树(二叉树)数据结构实现的,特点:对集合中的元素进行排序存储

TreeSet要注意的事项
1、往TreeSet添加元素的时候,如果元素具备自然顺序的特点,那么TreeSet会根据元素的自然顺序特性进行排序存储
2、往TreeSet添加元素的时候,如果元素不具备自然顺序的特点,那么元素所属的类必须要实现Comparable接口,把比较的规则定义在CompareTo方法上
3、往TreeSet添加元素的时候,如果元素不具备自然顺序的特点,那么元素所属的类也没有实现Comparable接口,那么在创建TreeSet对象的时候必须要传入比较器对象

比较器的定义格式:
    class 类名 implements Comparator{
    }

双列集合
———|Map 存储的数据都是以键值对的形式存在的,键可以不重复,值可以重复
————|HashMap 底层也是使用了哈希表实现的
————|TreeMap 底层也是使用了红黑树数据结构实现的,默认对元素进行自然排序(String),如果在比较的时候两个对象返回值为0,那么元素重复
————|HashTable 底层也是使用了哈希表维护的,存取的读取快,存储元素是无序的

HashSet样例的说明

class person{
    int id;
    String name;
    public person(int id,String name){
        super();
        this.id=id;
        this.name=name;

    }
    public String toString(){
        return "id是:"+this.id+" name是:"+this.name;
    }
}
public class CollectionDemo {

    public static void main(String[] args) {
        HashSet<person> hs=new HashSet<person>();
        hs.add(new person(123,"张三"));
        hs.add(new person(123,"张三"));
        System.out.println("集合的元素"+hs);

    }

}

运行的结果是
集合的元素[id是:123 name是:张三, id是:123 name是:张三]

如果在person类中增加了自己实现的hashCode方法以后

public int hashCode(){
        return this.id;
    }

运行的结果是
集合的元素[id是:123 name是:张三, id是:123 name是:张三]

如果在person类中增加了自己实现的hashCode方法和equals方法以后

public int hashCode(){
        return this.id;
    }
    public boolean equals(Object obj){
        person p=(person)obj;
        return this.id==p.id;
    }

运行的结果是
集合的元素[id是:123 name是:张三]

集合的遍历方法有常用的for循环 迭代器 entrySet等方法

package cn.xlucas.list;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

public class CollectionDemo1 {

    public static void main(String[] args) {
        System.out.println("======get方式遍历=========");
        ArrayList<String> ls=new ArrayList<String>();
        ls.add("张三");
        ls.add("李四");
        ls.add("王五");
        for(int i=0;i<ls.size();i++){
            System.out.println(ls.get(i));
        }
        //使用迭代器  注意: 迭代器在迭代的 过程中不能使用集合对象修改集合中的元素个数。如果需要修改要使用迭代器的方法进行修改,
        System.out.println("======迭代器方式遍历=========");
        HashSet<String> hs=new HashSet<String>();
        hs.add("张三");
        hs.add("李四");
        hs.add("王五");
        Iterator<String> it=hs.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    System.out.println("======迭代器方式for增强版遍历=========");
    for(String item:hs){
        System.out.println(item);
    }

    System.out.println("======entrySet方式遍历=========");
    HashMap<String,String> mp=new HashMap<String,String>();
    mp.put("1", "张三");
    mp.put("2", "李四");
    mp.put("3", "王五");

    Set<Entry<String, String>> entrys=mp.entrySet();
    for(Entry<String,String> entry:entrys){
        System.out.println("键位:"+entry.getKey()+" 值为: "+entry.getValue());
    }

    }

}

结果为
======get方式遍历=========
张三
李四
王五
======迭代器方式遍历=========
张三
李四
王五
======迭代器方式for增强版遍历=========
张三
李四
王五
======entrySet方式遍历=========
键位:3 值为: 王五
键位:2 值为: 李四
键位:1 值为: 张三

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

史上最全的Java集合类解析

本文仅分析部分原理和集合类的特点,不分析源码,旨在对java的集合类有一个整体的认识,理解各个不同类的关联和区别,让大家在不同的环境下学会选择不同的类来处理。Java中的集合类包含的内容很多而且很重要...
  • HHcoco
  • HHcoco
  • 2016年11月10日 17:03
  • 16488

Java集合类——Collection接口(传智播客毕老师视频讲解)

为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。 数组和集合类同是容器,有何不同? 数组虽然也可以...
  • lx20012002
  • lx20012002
  • 2014年09月15日 14:51
  • 1130

java中最常用的集合 详细讲解

/**我这只讲 ListArray ,ListedList,HashMap//ListArray 它是一个实现了List接口的类 ,List继承collection接口//调用import java....
  • QQ289172257
  • QQ289172257
  • 2009年11月30日 18:10
  • 1843

java 集合详解及如何应用

作为Java工程师,你是否还在不明所以的运用Java集合,这篇文章让你对Java集合不再困惑,对它有一个深刻的了解...
  • hellothejava
  • hellothejava
  • 2017年06月19日 11:03
  • 891

java集合(上)——数据结构详解

当我们要处理一串数据的时候,相比较c++和c中的数组和指针,在Java中我们更为常用的是ArrayList、HashMap等集合数据结构。c语言对指针的支持成就了他的深度,而Java中多种多样的包装类...
  • QuinnNorris
  • QuinnNorris
  • 2017年02月08日 14:55
  • 2318

【Java集合源码剖析】Java集合框架

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭...
  • mmc_maodun
  • mmc_maodun
  • 2014年06月29日 12:48
  • 19022

java集合中HashMap原理详解

HashMap在Java开发中有着非常重要的角色地位,每一个Java程序员都应该了解HashMap。 主要从源码角度来解析HashMap的设计思路,并且详细地阐述HashMap中的几个概念,并深入探...
  • chenleixing
  • chenleixing
  • 2015年01月07日 16:19
  • 1435

java集合的底层实现

ArrayList (1)底层采用数组实现,若使用不带参数的构造方法,则生成长度为10的Object类型数组。 (2)若个数超过10,则生成一个新数组,长度为原数组的1.5倍+1,原数组的内容复制...
  • hjw1991324
  • hjw1991324
  • 2016年08月16日 22:48
  • 3698

Java中的Map集合详解

一、概述  java中的map集合使用key-value映射来保存数据,其中value值可以重复,但key必须是唯一,也可以为空,但最多只能有一个key为空,它的主要实现类有HashMap、Linke...
  • Hchengbowen
  • Hchengbowen
  • 2016年04月30日 12:36
  • 2611

Java基础——集合(一)——集合体系、Collection集合

一、集合概述          Java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储。而数组长度固定,不能满足变化的要求。所以,java提供了集合。          ...
  • haovip123
  • haovip123
  • 2015年05月02日 00:09
  • 12512
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中集合的讲解
举报原因:
原因补充:

(最多只允许输入30个字)