一、Set接口
Set集合不允许包含相同的元素,如果试图将两个相同的元素添加到一个集合中,使用add方法,添加失败,返回false
1、HashSet
HashSet是Set集合的一个实现类,大多数情况使用它

特点:
a,排重(相同的元素不能被重复添加)
原理:如果两个对象的hashCode相同,并且通过equals方法比较返回的结果也是相同的,HashSet集合会认为这两个元素是同一个,集合中只会被添加一次
b。无序的(元素的添加的顺序和底层存储的顺序不同,是随机的,是由一套算法决定的,每次的顺序很可能不一样)
c.集合元素值可以是null
d.底层存储采用的数据结构是哈希算法,具有很好的存取和查找功能
原理:hashCode值决定了元素在内存中的存储地址,可以通过hashCode值就可以访问到集合的元素

2.LinkedHashSet
是hashSet的一个子类,使用和HashSet基本相同

特点:
a.排重的
b。有序的(元素的添加顺序和底层的存储顺序相同)
c。底层存储采用的数据结构是链表

3.TreeSet
是Set接口的一个实现类,同时也是SortedSet接口的唯一实现类,可以确保集合元素处于排序状态

特点:
a.排重的
b.有序的
c.底层存储采用的数据结构是二叉树(红黑树)(数据结构)

排序方式:
a。自然排序
TreeSet会调用集合元素的compareTo()方法比较元素之间的大小关系,然后按照升序进行排序

Java提供了一个Comparable接口,这个接口里有compareTo()方法,该方法返回一个整数。实现该接口的类必须重写compareTo()方法
规则是:
obj1 compareTo(obj2):
0:相等
正整数:obj1 > obj2
负整数:obj1 < obj2

Java中的一些常用类已经实现了Comparable接口,并重写了compareTo()方法,提供了比较大小的一套标准,Integer、Character(unicode编码)、Boolean(true > false),String(unicode编码),Date(后面的日期比前面的日期大)

b.定制排序
如果要实现降序排序,可以采用定制排序,主要需要实现一个Comparator接口,其中包含了一个compare()方法

规则:
int compare(obj1,obj2)
0:相等
正整数:obj1 > obj2
负整数:obj1 < obj2

二、Map接口
Map同样是一个集合的接口,同样用来存储引用数据类型,变长的容器,主要用于保存具有映射关系的数据,Map中的元素是以键值对的形式存在的
key:键
value:值
userName:zhangsan
password:1243134

key和value之间是单向的一对一的关系,可以通过指定的key就可以找到对应的value

特点:
a.Map中的元素是以键值对的形式存在的,一个键对应一个值,不允许只有键没有值,也不允许一个键对应多个值
b.Map中的元素是按照键进行排重的,Map中的键不允许重复,如果添加相同的键,这时后添加的会覆盖原来的
c。键和值都是引用数据类型
d.键和值可以为null(针对部分)

1.HashMap
特点:
a.无序的,
b.底层存储采用的数据结构是哈希算法

2.LinkedHashMap

特点:
a.有序的,
b.底层存储采用的数据结构是链表

3.Hashtable
Hashtable和HashMap之间的关系就相当于是Vector和ArrayList之间的关系

区别:
a.在用法上和HashMap基本相同
b.Hashtable是一个古老的Map实现类(JDK1.0开始就存在了)
c。Hashtable是线程安全的,HashMap是不安全的,推荐使用HashMap、
d.Hashtable的性能比HashMap的低
e.Hashtable是不允许将null作为键和值的。如果试图将null添加到Hashtable中时,将引发NullPointerException,

4.TreeMap
TreeMap是Map集合的一个实现类,同时也是SortedMap的实现类

特点:
a.有序的
b.底层存储采用的数据结构是二叉树(红黑树)

TreeMap中的排序主要针对的是Key
排序方式:自然排序和定制排序

5.Map的遍历、

a.增强for循环
b迭代器Iterator
c。entrySet

三、Collections工具类(Arrays工具类)

四。集合的总结

1.是否排重
XxxxxxList:不排重
XxxxxxSet:排重
XxxxxMap:按照键排重

2.底层存储的数据结构
ArrayList:数组结构
HashXxxxx:哈希算法
LinkedXxxx:链表
TreeXxxx:二叉树(红黑树)

3.是否有序
HashXxxx:无序的
LinkedHashXxxx:有序的

JAVA基础知识总结:十五的更多相关文章

  1. Java基础知识陷阱(十)

    本文发表于本人博客. 上个星期由于时间比较紧所以未能继续写下去,今天再接再厉,专心 + 坚持这样离目标就越来越近了!废话少说说正题,今天我们还是来说说java中比较基础的知识,大家知道编写java程序 ...

  2. JAVA基础知识总结:五

    一.初步认识数组 1.理解数组 数组是用来存储相兼容数据类型的定长的容器 特点: a.只能存放相兼容数据类型,不能存放多种数据类型 b.可以存放基本数据类型和引用数据类型 c.数组是定长的,一旦被初始 ...

  3. Java基础知识笔记(五:多线程的同步问题)

    编写多线程程序往往是为了提高资源的利用率,或者提高程序的运行效率,或者更好地监控程序的运行过程等.多线程同步处理的目的是为了让多个线程协调地并发工作.对多线程进行同步处理可以通过同步方法和同步语句块实 ...

  4. Java基础知识学习(五)

    高级特性:接口 接口(Interface) 1) 接口中只能定义抽象方法,默认为 public abstract 的,变量可以是static的 2) 接口中没有构造方法 3) 一个接口不实现另一个接口 ...

  5. Java基础学习笔记十五 集合、迭代器、泛型

    Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都 ...

  6. Java基础(三十五)Math、Random类和数字格式化(String.format方法)

    一.Math类 Math类常用的方法: public static long abs (double a) 返回a的绝对值 public static double max (double a,dou ...

  7. Java基础(二十五)Java IO(2)文件File类

    File类是一个与流无关的类.File类的对象可以获取文件及其文件所在的目录.文件的长度等信息. 1.File对象的常用构造方法. (1)File(String pathname) File file ...

  8. Java基础笔记(十五)——封装(续)static关键字

    static 静态的,用static修饰的成员叫静态成员或类成员.类实例化的所有对象都会共用同一块静态空间.一个对象将值改变,其它对象的值也就随之改变了. 如:public static int pr ...

  9. Java基础知识笔记第五章:子类与继承

    子类与父类 子类 class 子类名 extends 父类名{ ....... } 类的树形结构 子类的继承性 子类和父类在同一包中的继承性 子类继承了父类不是private的成员属性和成员方法   ...

  10. Java基础知识陷阱系列

    Java基础知识陷阱系列 今天抽空把Java基础知识陷阱有关的文章汇总于此,便于大家查看. Java基础知识陷阱(一) Java基础知识陷阱(二) Java基础知识陷阱(三) Java基础知识陷阱(四 ...

随机推荐

  1. MySQL乐观锁和悲观锁的概念和原理

    乐观锁:在取数据时不加锁,等处理完逻辑的时候,查看是否与上一次相同,若相同则更新,若不同则拒绝. 悲观锁:在取数据时就加上锁,只有更新完数据之后,别的用户才可以进行读. (个人总结)

  2. runtime.Gosched()的作用分析

    untime.Gosched()用于让出CPU时间片.这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑 测试代码: package main ...

  3. oracle /*+ SYS_DL_CURSOR */ 这个hint

    之前一直都没使用过 /*+ SYS_DL_CURSOR */这个提示,今天下午在排查一个性能问题的时候,发现出问题的session在执行一个带了SYS_DL_CURSOR提示的语句,类似于: 经查这个 ...

  4. vim 快捷键(update)

    网上盗的图,233   2018年08月31日14:31:19 update: 批量行操作 esc->ctrl+v->选中批量行->shift+i->operation-> ...

  5. 线程同步——用户模式下线程同步——Interlocked实现线程同步

    线程同步分为用户模式下的线程同步和内核对象的线程同步. 当然用户模式下的线程同步实现速度比内核模式下快,但是功能也有局 //1.利用原子访问: Interlocked系列函数,关于Interlocke ...

  6. opencv学习之路(13)、图像阈值化threshold

    一.图像阈值化简介 二.固定阈值 三.自适应阈值 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src ...

  7. 【Python55--爬虫:代理】

    一.反爬虫之隐藏 1.网站检查访问的是正常用户还是程序,关键在于User-Agent 1).第一种方法:采用header --修改header(两种方法): -->  在Request之前通过h ...

  8. Android Studio报错view is not constrained

    在活动上面创建了两个按钮,在Design上看上去是两个按钮分开的,run一下,按钮就重合在一起了,而且一直报错,这个时候再去看一下Design,两个按钮重在一块,只显示一个按钮.如下图: button ...

  9. python ---12 生成器 推导式

    一.生成器 函数中有yield 的就是生成器函数(替代了return) 本质就是迭代器   一个一个的创建对象     节省内存 1.创建生成器 最后以yield结束 1. 通过⽣成器函数   2. ...

  10. springboot项目打包部署在指定的tomcat容器中

    1.首先需要修改项目的打包方式,将package改为war <packaging>war</packaging> 2.移除spring boot web中的嵌入式tomcat ...