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集合整体讲解

  • 2013年12月05日 17:30
  • 3.08MB
  • 下载

java_关于集合的讲解

  • 2009年05月02日 23:19
  • 172KB
  • 下载

java基础讲解之集合鼻祖--- Collection

ps:案例来源于毕向东老师Java基础教程 本文讲述了Collection的主要方法,全是干货。附上常用集合的关系图   知识点一:Collection接口的共性方法 1.添加: publi...

java 集合类讲解

  • 2012年04月27日 11:15
  • 977KB
  • 下载

对java中Map集合的讲解

  • 2012年10月08日 10:32
  • 1.07MB
  • 下载

java集合框架讲解

java集合框架 一、java集合框架概述 java集合类从1.0开始不断完善,其中使用了丰富的数据结构(数组,队列,栈,链表,二叉树,哈希表等),主要有list,set,map三大接口及其子类实现,...

java集合框架的讲解

下面要开始java中相关集合框架的学习啦。   Are you ready?Let's go~~   今天要讲解的Java中的集合框架。   1) 首先查看jdk中Collection类的源码后...
  • pql925
  • pql925
  • 2017年07月16日 10:54
  • 66

Java集合详细讲解(一)

引言由前一篇的文章,大家大概可以看到Java集合框架的基本结构和重点,可以这么说Java集合的重心就在List,Set,Map,Queue还有Iterator(迭代器)上。我写这篇文章主要借鉴了李春春...
  • ragrok
  • ragrok
  • 2016年12月15日 13:02
  • 430

Java集合--简单讲解

数组与集合 集合整体结构图 Collection和Iterator List接口 List示例-String类型 遍历集合的方法 Iterator迭代器 forEach循环 泛型的初步 为什么使用泛型...

Java-集合 list对象进行指定位置插入、删除、迭代、遍历输出(具体习题讲解)

原题: 创建一个 List,在 List 中增加三个工人,基本信息如下: 姓名   年龄    工资 zhang3 18      3000 li4    25      3500 wang5 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中集合的讲解
举报原因:
原因补充:

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