集合

为什么使用集合:

在java中数组的大小是固定的,不能改变。而且只能存放同一种类型的数据,而java的集合可以创建和存放大小不固定的数据。java集合都在java.util包中。

Collection

Collection接口是所有集合的根接口

- 有序 重复
Collection

Set(集)

set不重复,无序。如果自己写的类需要重写(hashcode和equals)不然比较的内存,这样使得所有实例都不相同。set有一个子接口叫做SortedSet,它具有排序功能。而TreeSet是SortedSet的实现类。

实现类:

LinkedHashSet:

和HashSet唯一区别是有序的。

HashSet :

采用散列的存储方法,是无序的

TreeSet :

- 有序 重复
HashSet
AbstractSet
TreeSet 是(用二叉树排序)
LinkedHashSet

使用二叉树排序,如果存放自定义类则报错,因为TreeSet在将自定义类转换成comparable的时候错误(TreeSet无法对自定义类经行排序)。有两种方法解决。

方法一:

自定义类继承Comparable

class Person  implements Comparable<Person>{
    private String name;
    private int  age;
    private double sore;
    public Person(String name, int age,double sore) {
        super();
        this.name = name;
        this.age = age;
        this.sore=sore;
        
    }
    
    @Override
    public int compareTo(Person o) {
        // TODO Auto-generated method stub
        //按年龄顺序再按名字顺序
        int num=this.age>o.age?1:-1;
        return this.age==o.age?this.name.compareTo(o.name):num;
    }
}

public class LearnOfSet {  //测试类
    public static void main(String args[]){
    
        Set<Person> set2;
        set2=new TreeSet<Person>();
        set2.add(new Person("张三", 15,90));
        set2.add(new Person("李四", 20,80));
        set2.add(new Person("王五", 14,100));
        set2.add(new Person("赵六", 19,98));
        set2.add(new Person("吴七", 19,60));
        set2.add(new Person("可八", 50,80));
        set2.add(new Person("王九", 50,70));
        set2.add(new Person("赵十一", 50,110));
        set2.add(new Person("刘十三", 50,60));
        set2.add(new Person("秦十二", 50,60));
        
        for (Person person : set2) {   //遍历
            System.out.println(person.toString());
        }
    }
}

方法二:

实现Comparator接口

public class LearnOfSet {
    public static void main(String args[]){

        Set<Person> set2;
        set2=new TreeSet<Person>(new LearnOfSet().new PersonScoreComparator());
        set2.add(new Person("张三", 15,90));
        set2.add(new Person("李四", 20,80));
        set2.add(new Person("王五", 14,100));
        set2.add(new Person("赵六", 19,98));
        set2.add(new Person("吴七", 19,60));
        set2.add(new Person("可八", 50,80));
        set2.add(new Person("王九", 50,70));
        set2.add(new Person("赵十一", 50,110));
        set2.add(new Person("刘十三", 50,60));
        set2.add(new Person("秦十二", 50,60));
        
        for (Person person : set2) {
            System.out.println(person.toString());
        }
    }
    public class PersonScoreComparator implements Comparator<Person>{

        @Override
        public int compare(Person o1, Person o2) {
            // TODO Auto-generated method stub
            if(o1.getSore()>o2.getSore()) return 1;
            if(o1.getSore()<o2.getSore()) return -1;
            if(o1.getAge()>o2.getAge()) return 1;
            if(o1.getAge()<o2.getAge()) return -1;
            return 1;
        }
    }

}

List(列表)

实现类:

LinkedList:链表实现,增删快,查询慢

Vector:数组实现,线程安全,重量级(一般不用)。

ArrayList: 数组实现,查询快,增删慢,线程不安全,轻量级;

- 有序 重复
List

Map(映射)

实现类:

HashMap:允许null值和null键

Hashtable:线程安全的,不允许null值和null键

LinkedHashMap:维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

Properties:key和value都是String类型,用来读配置文件;
TreeMap:对Map经行排序,和TreeSet用法相似

- 有序 重复
HashSet 使用key-value来映射和存储数据,Key必须惟一,value可以重复
AbstractSet 使用key-value来映射和存储数据,Key必须惟一,value可以重复
TreeSet 是(用二叉树排序) 使用key-value来映射和存储数据,Key必须惟一,value可以重复

两个工具类 Arrays 和 Collections

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

2.Collections、主要提供了在 collection 上进行操作的静态方法(同步集合类方法) 。

Collections.synchronized... 方法将List 、 Map 或者Set转换成线程安全。

Collections.sort():将List经行排序,但要实现上诉TreeSet的两个接口中的一个。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 3.3 集合 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另...
    闫子扬阅读 722评论 0 1
  • 集合框架体系概述 为什么出现集合类?方便多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方法. 数组...
    acc8226阅读 768评论 0 1
  • 以下是《疯狂Java讲义》中的一些知识,如有错误,烦请指正。 集合概述 Java集合可以分为Set、List、Ma...
    hainingwyx阅读 534评论 0 1
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX阅读 870评论 0 1
  • 概述 Java集合框架由Java类库的一系列接口、抽象类以及具体实现类组成。我们这里所说的集合就是把一组对象组织到...
    absfree阅读 1,251评论 0 10