ArrayList嵌套

定义

在集合中存放集合,和二维数组类似

public static void main(String[] args) {

//集合中的元素还是集合

ArrayList<ArrayList<Student>> school = new ArrayList<>();

ArrayList<Student> clas1 = new ArrayList<>();

clas1.add(new Student("小红",18));

clas1.add(new Student("小明", 20));

school.add(clas1);

ArrayList<Student> clas2 = new ArrayList<>();

clas2.add(new Student("小张",18));

clas2.add(new Student("小李", 20));

school.add(clas2);

ArrayList<Student> clas3 = new ArrayList<>();

clas3.add(new Student("tom",18));

clas3.add(new Student("jack", 20));

school.add(clas3);

System.out.println(school);

}

Set集合

定义

Set集合存数的元素是无序的, 而且不允许储存重复的元素, 每当有新的元素存入的时候,Set集合会先去过滤, 如果发现和集合中现有元素出现重复, 就不在允许添加

应用场景

当我们不想让集合中出现重复的元素时,使用Set集合

当我们需要排除重复数据时,使用Set集合

演示

public static void main(String[] args) {

//集合中的元素还是集合

HashSet<Student> s = new HashSet<>();

Student student = new Student("小红", 18);

Student student2 = new Student("小红", 18);

s.add(student);

s.add(student2);

Iterator<Student> it = s.iterator();

while (it.hasNext()) {

Student student3 = it.next();

System.out.println(student3);

}

}

HashSet

定义

HashSet集合中的元素是通过hash值来比较是否相同

集合通过元素的hashCode和equals方法来比较两个元素是否相同, 不同就存入, 相同不存入

元素存入的位置未知,和存入的顺序无关

存储原理

HashSet最后还是存入数组中, 只是根据元素的Hash值来确定存入的角标位置

元素的hash值 ^ (元素的hash值 >>> 16) & (数组的长度-1)

HashSet中不是直接存入我们给定的元素, 而是用集合中的一个内部类封装我们存入的元素,所以当我们存入null的时候,不会因为和数组中角标位上默认值null起冲突

如果两个不同的元素根据不同的Hash值计算出了同一个角标值,那么都能存进去

构造方法

HashSet()    构造出一个新的集合, 底层数组默认的初始容量是16(扩容一倍),加载因子是0.75

加载因子: 集合中的数组可用的

角标值得可选范围越小,计算出重复角标值得概率就越高

HashSet(Collection<? extends E> c) 构造一个包含指定collection中元素的新set 

常用方法

boolean add( E e)    如果此set集合中尚未包含指定元素,则添加指定元素

boolean remove(Object o)    移除某个元素 []

int size()    获取集合的长度

演示

需求: 去除ArrayList集合中的重复元素

publicstaticvoidmain(String[]args) {

    ArrayList<String>al=newArrayList<>();

    al.add("a");

    al.add("s");

    al.add("x");

    al.add("a");

    al.add("s");


    HashSet<String>hs=newHashSet<>(al);

    System.out.println(hs);

}

public static void main(String[] args) {

ArrayList<String> al = new ArrayList<>();

al.add("a");

al.add("s");

al.add("x");

al.add("a");

al.add("s");

HashSet<String> hs = new HashSet<>(al);

System.out.println(hs);

}

HashSet集合中元素保证唯一性

原理解析

HashMap是通过调用元素的hashCode方法来比较两个元素是否形同的,所有如果要保证引用数据类型逻辑上的唯一性,就必须重写hashCode方法和equals方法

演示

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + age;

result = prime * result + ((name == null) ? 0 : name.hashCode());

return result;

}

prime = 31 的原因

别人选的, 没有原因

是质数, 和别的值计算得出的数重复的概率低

大小适中, 不会出现太大导致结果无法使用的问题

便于计算 2<<5 -1

引用数据类型除重

重写hashCode和equals方法,自定义比较内容

LinkedHashSet

定义

兼顾了linked的有序性和HashSet的元素唯一性

public static void main(String[] args) {

HashSet<String> hashSet = new HashSet<>();

hashSet.add("b");

hashSet.add("c");

hashSet.add("a");

hashSet.add("d");

System.out.println(hashSet); //结果 : [a, b, c, d]

LinkedHashSet<String> lhs = new LinkedHashSet<>();

lhs.add("b");

lhs.add("c");

lhs.add("a");

lhs.add("d");

System.out.println(lhs); //结果: [b, c, a, d]

}



TreeSet集合

定义

TreeSet是一种顺序的集合, 记住, 这里的顺序是指集合中的元素有顺序, 她是通过比较元素的大小来存放的, 大的存右边,小的存左边

存入的元素必须实现Comparable接口,并且重写comparTo方法

最后存入的元素会形成一个树状结构

构造方法

TreeSet()    构造一个新的空set, 该set根据其元素的自然顺序进行排序

TreeSet(Comparator <? super E> comparator)  构建一个空的TreeSet, 他根据指定比较器进行排序

常用方法                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

add(E e)    将指定元素添加到此set

first()    返回此set中当前第一元素

last()    返回此set中当前最后一个元素

floor()    返回此set中小于等于给定元素的最大元素,不存在则返回null

higher()    返回此set中严格大于给定元素的最小元素,不存在则返回null

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

推荐阅读更多精彩内容

  • 四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。生活中很多数据的描述都采...
    佘大将军阅读 747评论 0 2
  • 17.01_集合框架(HashSet存储字符串并遍历) A:Set集合概述及特点通过API查看即可 B:案例演示H...
    dreamkong阅读 466评论 0 0
  • 导语: 最近学习了集合,认为有必要做一下总结。希望能够帮助自己的同时,帮助到更多人。本文内容较长,如有错误,还请指...
    我是小徐同学阅读 617评论 0 8
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,049评论 0 4
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,219评论 0 2