对整个体系做一个记录,并不涉及详细应用

Object类

1. 重写toString方法

System.out.println可以打印任何对象在于Object类拥有一个方法

public String toString()

所以子类为了能够正常打印数据,应该对此方法进行重写

2. 重写equals方法

Java中==符号只是检查两个引用是否指向同一对象,因此,类如果想实现对象是否等价的判断,亦需要对equals方法进行重写

重写equals方法的原则

  • 自反性(只要一个对象的引用不为null,那么这个引用对自身调用equals将等于true)
  • 对称性(a.equals(b)的结果应该与b.equals(a)的结果一致)
  • 传递性(如果a等于b,b等于c,那么a应该要等于c)
  • 一致性(在两个参与的对象都未曾改变的情况下,多次比较的结果应该相同)
  • null不等于null(即未知不等于未知)
  • 最后一条:重写了equals方法就必须要重写hashCode方法(不然两个等价的对象可能会得到不同的哈希码,那么在使用集合时会产生严重错误)
3. 重写hashCode方法

管理很多对象时如果采用数组这一线性表结构,查找效率将会很低,所以需要采用哈希表进行存储。

哈希表原理如下

  1. 进入哈希存储前,首先调用对象的hashcode方法获取其哈希码,定位对象所在的哈希桶
  2. 在哈希桶内部,所有的哈希码相同的不同对象是按线性表的方式存储的

Ordered与Sorted接口

Ordered的排序功能由指定的权值排序,相应的类与接口有

ArrayList
Vector
LinkedList
List
LinkedHashSet

Sorted的排序功能由元素自身的权值排序,相应的类与接口有

TreeSet
TreeMap
SortedSet
SortedMap

Java集合类

Ordered相关

1. List接口

实现了List接口的类有ArrayList,Vector,LinkedList

2. Set接口

Set接口与List接口的不同之处

  • Set中不能有重复元素,而List无此要求
  • Set中的元素是无序的

实现了Set接口的类有HashSet,LinkedHashSet

HashSet元素的判重过程如下

  • 当一个对象将要插入集合时,首先调用对象的hashCode方法,若hashCode返回值指向的哈希桶为空,则成功插入
  • 若指向的哈希桶不为空,则调用equals方法拿哈希桶中元素与此对象进行比较,如不同,则成功插入
  • 否则插入失败

Sorted相关

1. SortedSet接口

与基于Order的Set接口不同,SortedSet接口将安装元素权值进行排序

实现了SortedSet接口的类有TreeSet类

自定义权值排序方法,对于一个类,我们必须实现Comparable接口方可按照自己的想法建造一个TreeSet集合,当然也可指定比较器进行构造

class a implements Comparable{
int v;
@Override
public int compareTo(Object o){
a t=(a)o;
return this.v-t.v;
}
}
class cmp implements Comparator{
public int compare(Object o1,Object o2){ }
}

映射

Map接口

实现了Map接口的有HashMap,Hashtable

SortedMap接口

相较于Map接口,SortedMap同时具有Sorted接口的排序功能,遍历的时候有所不同

栈的实现

Stack类
Deque接口

因为Stack类继承自Vector类,可以会对性能有所影响,因此提供有一个Deque接口

实现了Deque接口的类有ArrayDeque,LinkedBlockingDeque,LinkedList

集合的常见操作

1. 元素排序
Collections工具类
public static void sort(List list)
public static void sort(List list,Comparator cmp)
2. 搜索
Collections工具类
public static int binarySearch(List list,Obeject key)
public static int binarySearch(List list,Obeject key,Comparator cmp)
3. 打乱顺序
Collections工具类
public static void shuffle(List list)

Java 集合相关的更多相关文章

  1. java集合相关问题

    1.Map/Set 的 key 为自定义对象时,必须重写 hashCode 和 equals: 2.ArrayList 的 subList 结果不可强转成 ArrayList,否则会抛出 ClassC ...

  2. java面试题-Java集合相关

    1. ArrayList 和 Vector 的区别 ArrayList和Vector底层实现原理都是一样得,都是使用数组方式存储数据 Vector是线程安全的,但是性能比ArrayList要低. Ar ...

  3. JAVA 集合相关整理和学习

    一.Set接口实现类 二.List接口实现类 三.Queue接口实现类 四.Map接口实现类 五.上面的图片截自附件: 附件列表

  4. Java集合的10个最常见问题

    以下是一些在Stackoverflow上经常被问起的与Java集合相关的问题.在你查阅这些问题之前,最好先去看看[Simple Java]Java集合框架的接口和类层次关系结构图. 什么时候优先选择L ...

  5. Java集合框架相关知识整理

    1.常见的集合有哪些? Collection接口和Map接口是所有集合框架的父接口    Collection接口的子接口包括:Set接口和List接口    Map接口的实现类主要有:HashMap ...

  6. Java 集合(List、Set、Map 等)相关问答归纳再整理

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  7. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  8. 深入java集合系列文章

    搞懂java的相关集合实现原理,对技术上有很大的提高,网上有一系列文章对java中的集合做了深入的分析, 先转载记录下 深入Java集合学习系列 Java 集合系列目录(Category) HashM ...

  9. (转)Java集合框架:HashMap

    来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...

随机推荐

  1. javascript匿名方法

    首先,看一段很有意思的代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> < ...

  2. linux 重名名、删除文件操作

    linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c 删除文件夹 r ...

  3. Ubuntu 必装软件及安装教程

    安装搜狗拼音输入法 因为sogou是基于fcitx的,所以先添加fcitx键盘输入法系统[系统默认是iBus].在终端中,输入命令将下载源添加至系统源(添加依赖). sudo add-apt-repo ...

  4. 数据结构 - 顺序队列的实行(C语言)

    数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避 ...

  5. 洛谷 P2824 [HEOI2016/TJOI2016]排序 (线段树合并)

    (另外:题解中有一种思路很高妙而且看上去可以适用一些其他情况的离线方法) 线段树合并&复杂度的简单说明:https://blog.csdn.net/zawedx/article/details ...

  6. 支付宝添加scheme的方法

    点击项目名称,点击“Info”选项卡,在“URL Types”选项中,点击“+”,在“URL Schemes”中输入“myAlipay”.“myAlipay”来自于文件“APViewControlle ...

  7. Python multiprocessing相关疑问

    1. multiprocessing 和 threading有什么区别? threading module并没有真正利用多核.而multiprocessing 利用subprocess避开了pytho ...

  8. 455 Assign Cookies 分发饼干

    假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸:并且每块饼干 j ,都有一个尺寸 ...

  9. [书目20150303]软件工程的本质:运用SEMAT内核

    译者序Robert Martin作序Bertrand Meyer作序Richard Soley作序前言致谢第一部分   内核思想解释第1章   简要介绍如何使用内核1.1   为什么开发优秀软件具有很 ...

  10. 关于.Net中Process的使用方法和各种用途汇总(二):用Process启动cmd.exe完成将cs编译成dll

    上一章博客我为大家介绍了Process类的所有基本使用方法,这一章博客我来为大家做一个小扩展,来熟悉一下Process类的实际使用,废话不多说我们开始演示. 先看看我们的软件要设计成的布局吧. 首先我 ...