JAVA基础知识总结:十五
一、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基础知识总结:十五的更多相关文章
- Java基础知识陷阱(十)
本文发表于本人博客. 上个星期由于时间比较紧所以未能继续写下去,今天再接再厉,专心 + 坚持这样离目标就越来越近了!废话少说说正题,今天我们还是来说说java中比较基础的知识,大家知道编写java程序 ...
- JAVA基础知识总结:五
一.初步认识数组 1.理解数组 数组是用来存储相兼容数据类型的定长的容器 特点: a.只能存放相兼容数据类型,不能存放多种数据类型 b.可以存放基本数据类型和引用数据类型 c.数组是定长的,一旦被初始 ...
- Java基础知识笔记(五:多线程的同步问题)
编写多线程程序往往是为了提高资源的利用率,或者提高程序的运行效率,或者更好地监控程序的运行过程等.多线程同步处理的目的是为了让多个线程协调地并发工作.对多线程进行同步处理可以通过同步方法和同步语句块实 ...
- Java基础知识学习(五)
高级特性:接口 接口(Interface) 1) 接口中只能定义抽象方法,默认为 public abstract 的,变量可以是static的 2) 接口中没有构造方法 3) 一个接口不实现另一个接口 ...
- Java基础学习笔记十五 集合、迭代器、泛型
Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都 ...
- Java基础(三十五)Math、Random类和数字格式化(String.format方法)
一.Math类 Math类常用的方法: public static long abs (double a) 返回a的绝对值 public static double max (double a,dou ...
- Java基础(二十五)Java IO(2)文件File类
File类是一个与流无关的类.File类的对象可以获取文件及其文件所在的目录.文件的长度等信息. 1.File对象的常用构造方法. (1)File(String pathname) File file ...
- Java基础笔记(十五)——封装(续)static关键字
static 静态的,用static修饰的成员叫静态成员或类成员.类实例化的所有对象都会共用同一块静态空间.一个对象将值改变,其它对象的值也就随之改变了. 如:public static int pr ...
- Java基础知识笔记第五章:子类与继承
子类与父类 子类 class 子类名 extends 父类名{ ....... } 类的树形结构 子类的继承性 子类和父类在同一包中的继承性 子类继承了父类不是private的成员属性和成员方法 ...
- Java基础知识陷阱系列
Java基础知识陷阱系列 今天抽空把Java基础知识陷阱有关的文章汇总于此,便于大家查看. Java基础知识陷阱(一) Java基础知识陷阱(二) Java基础知识陷阱(三) Java基础知识陷阱(四 ...
随机推荐
- MySQL乐观锁和悲观锁的概念和原理
乐观锁:在取数据时不加锁,等处理完逻辑的时候,查看是否与上一次相同,若相同则更新,若不同则拒绝. 悲观锁:在取数据时就加上锁,只有更新完数据之后,别的用户才可以进行读. (个人总结)
- runtime.Gosched()的作用分析
untime.Gosched()用于让出CPU时间片.这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑 测试代码: package main ...
- oracle /*+ SYS_DL_CURSOR */ 这个hint
之前一直都没使用过 /*+ SYS_DL_CURSOR */这个提示,今天下午在排查一个性能问题的时候,发现出问题的session在执行一个带了SYS_DL_CURSOR提示的语句,类似于: 经查这个 ...
- vim 快捷键(update)
网上盗的图,233 2018年08月31日14:31:19 update: 批量行操作 esc->ctrl+v->选中批量行->shift+i->operation-> ...
- 线程同步——用户模式下线程同步——Interlocked实现线程同步
线程同步分为用户模式下的线程同步和内核对象的线程同步. 当然用户模式下的线程同步实现速度比内核模式下快,但是功能也有局 //1.利用原子访问: Interlocked系列函数,关于Interlocke ...
- opencv学习之路(13)、图像阈值化threshold
一.图像阈值化简介 二.固定阈值 三.自适应阈值 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src ...
- 【Python55--爬虫:代理】
一.反爬虫之隐藏 1.网站检查访问的是正常用户还是程序,关键在于User-Agent 1).第一种方法:采用header --修改header(两种方法): --> 在Request之前通过h ...
- Android Studio报错view is not constrained
在活动上面创建了两个按钮,在Design上看上去是两个按钮分开的,run一下,按钮就重合在一起了,而且一直报错,这个时候再去看一下Design,两个按钮重在一块,只显示一个按钮.如下图: button ...
- python ---12 生成器 推导式
一.生成器 函数中有yield 的就是生成器函数(替代了return) 本质就是迭代器 一个一个的创建对象 节省内存 1.创建生成器 最后以yield结束 1. 通过⽣成器函数 2. ...
- springboot项目打包部署在指定的tomcat容器中
1.首先需要修改项目的打包方式,将package改为war <packaging>war</packaging> 2.移除spring boot web中的嵌入式tomcat ...