一起重新开始学大数据-java篇-DAY17-集合体系:

本文主要是介绍一起重新开始学大数据-java篇-DAY17-集合体系:,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

集合体系:

在这里插入图片描述

集合:接口:

Collection Map List Set实现类:

ArrayList LinkedList HashSet TreeSet HashMap通过创建实现类指向接口对象,去创建接口

注意: Queue接口与List、Set同一级别,都是继承了Collection接口。 看图你会发现,LinkedList既可以实现Queue接口,也可以实现List接口.只不过呢, LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果 是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。

SortedSet是个接口,它里面的(只有TreeSet这一个实现可用)中的元素一定是有序的。

Collection概述:

是单列集合的顶层接口,表示一组对象,这些对象也称为了Collection的元素JDK不提供此接口的直接实现类,提供了更具体的子接口(List和Set)实现使用:

通过多态的方式集合的实现类ArrayList和LinkedList常用方法:方法作用boolean add(E e);添加元素boolean remove(Object o)从集合中移除指定元素void clear()清空集合中的元素boolean contains(Object o)判断集合中是否存在指定元素boolean isEmpty()判断集合是否为空int size()集合的长度,集合中的元素个数迭代器:

Iterator:迭代器,集合的专用遍历方式Iterator iterator():返回此集合中的元素,通过集合中的iterator()方法得到Iterator中的常用方法:方法作用E next()返回迭代器中下一个元素boolean hasNext()如果迭代器中具有更多的元素,返回true为什么要使用迭代器?

for循环遍历ArrayList,如果我换一个集合Map,就不能进行遍历,而Iterator模式总是用同一种逻辑来遍历集合。

在这里插入图片描述

List:概述:

有序集合(序列):可以精准的控制元素的插入位置,可以通过索引来访问元素特点:

有序:存储和取出的元素顺序一样可重复:存储的元素可以重复特有方法方法作用boolean add(int index,E element);在集合中指定位置插入元素E remove(int index)删除指定元素,并返回删除元素E get(int index)返回指定位置的元素E set(int index,E element)修改指定元素,并返回被修改元素增强for

简化数组和集合的遍历内部原理是一个Iterator迭代器增强for格式:

for(元素数据类型 变量名:数组或Collection对象){//代码体直接使用变量即可}范例:

int[] arr={1,2,3}for(int i:arr){System.out.print(i)}ArrayList数组结构

数组是一种查询快,增删慢的模型查询快:查询数据通过索引定位,查询任意数据耗时相同删除慢:删除元素时,要讲原始数据删除,同时元素进行前移添加慢:添加元素时,要在添加位置的每一个数据进行后移,再添加元素LinkedList链表结构

链表是一种增删快,查询慢的模型增删快:增加和删除时,只需要修改下一个地址指向,耗时相同查询慢:查询数据时,都需要从头开始查询Set:(没有独有的方法,在学习完Collection,set就已经学完了)

特点:

元素不重复无序(插入和取出的顺序不能保证一致)无下标HashSet:

特点:

元素不重复无序(插入和取出的顺序不能保证一致)无下标哈希值概述:

根据对象的地址值或者字符串或者数字计算得到的int类型的数值Obeject中可以通过方法来获取哈希值方法作用public void hasCode()返回对象的哈希值特点:

同一个对象多次调用hasCode()方法返回的哈希值是相同的默认情况下,不同对象的的哈希值是不同的,通过重写hasCode(),可以实现让不同对象的哈希值相同注意:通话和重地的哈希值相同HashSet的存储机制结构:元素为链表的数组

1.获取存储对象的哈希值

2.计算哈希值得到存储位置

3.如果存储的位置链表没有数据直接插入

4.1.如果位置相同:判断哈希值,在判断equals

4.2.不相同直接插入

注意:

覆盖本质上还是使用equals判断TressSet特点:

不重复 没有下标 无序(因为元素有序,所以插入和取出的顺序不能保证一致) 元素有序(自然排序:按数字进行排序)

元素有序,不是存储或取出有序,而是按照一定的规则进行排序,排序方式取决于构造方法

方法作用TreeSet():根据元素的自然排序进行排序TreeSet(Comparator comparator):根据指定的比较器比较

使用无参构造:

自定的类需要实现Comparable

使用有参的构造:

自定的类不需要实现Comparable,比较方式通过创建一个新的类继承Comparable接口(或者匿名类)实现Comparable:

用TreeSet存储对象,无参构造方法使用自然排序

自然排序的实现,就是元素实现Comparable接口,重写compareTo方法

重写方法时,排序规则要按需求的主次条件来写

compareTo:返回值分类三类

正整:插入的数据比原来的大负数:插入的数据比原来的小零:表示相同数据,去重注意:

this:插入的数据o:已存在的数据Comparator:

用TreeSet存储对象,有参构造方法使用比较器进行排序比较器的实现,就是让集合构造接收Comparator接口的实现类,重写compare方法重写方法时,排序规则要按需求的主次条件来写

1.排序的引入(以基本数据类型的排序为例) 由于TreeSet可以实现对元素按照某种规则进行排序,例如:

import java.util.TreeSet;public class myClass { public static void main(String[] args) { TreeSet integers = new TreeSet<>(); integers.add(10); integers.add(15); integers.add(30); integers.add(20); integers.add(40); integers.add(44); for (Integer integer : integers) { System.out.println(integer); } }}

2.如果是引用数据类型,自定义对象,该如何排序? student类

public class Student { private int age; public Student(int age) { this.age = age; } public Student() { } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}

myclass

import java.util.TreeSet;public class myClass { public static void main(String[] args) { TreeSet students = new TreeSet<>(); Student zs = new Student(10); Student ww = new Student(20); Student student = new Student(12); students.add(zs); students.add(ww); students.add(student); for (Student student1 : students) { System.out.println(student1); } }}

结果报错:Exception in thread “main” XXXXXXXXcannot be cast to java.lang.Comparable (原因:由于不知道要使用哪一种排序方式排序,所以报错,反正就是没实现Comparable)

在这里插入图片描述

一、自然排序 ①Student类中实现Comparable接口 ②重写Comparable接口中的Compare to方法

compareTo(T o) 比较当前对象与指定对象的顺序

import java.util.TreeSet;public class Class { public static void main(String[] args) { TreeSet students = new TreeSet<>(); Student zs = new Student("zs",18); Student ls = new Student("ls", 20); Student ww = new Student("ww", 20); students.add(zs); students.add(ls); students.add(ww); for(Student s:students){ System.out.println(s.getName()+s.getAge()); } }}

public class Student implements Comparable{ private String name; private int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Student o) { int i = this.age - o.age; int i1=(i==0)?this.name.compareTo(o.name):i; return i1; }}

在这里插入图片描述

二、比较器排序 比较器排序步骤: ①单独创建一个比较类(可以单独搞个类,不过我懒,直接使用匿名内部类O(∩_∩)O),并且要让其继承Comparator接口 ②重写Comparator接口中的Compare方法

compare(T O1,T O2) 比较用来排序的两个参数

Student public class Student { private int age; public Student(int age) { this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }

Class

import java.util.Comparator;import java.util.TreeSet;public class Class {public static void main(String[] args) { TreeSet students = new TreeSet(new Comparator() { @Override public int compare(Student o1, Student o2) { int i = o1.getAge() - o2.getAge(); return i; } }); Student zs = new Student(18); Student ls = new Student( 20); students.add(zs); students.add(ls); for(Student s:students){ System.out.println(s.getAge()); }}}

| | | | | 上一章–DAY16.1面对对象思维导图(粉丝可见分享) 下一章-随缘更新 天天更新不容易,随手点个小赞

这篇关于一起重新开始学大数据-java篇-DAY17-集合体系:的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持

文章版权声明:除非注明,否则均为 谢士广博客 原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,507人围观)

还没有评论,来说两句吧...

目录[+]