8.13.1 集合框架, 数据结构

Collection集合选取规则:(Vector现在用的不多了所以不考虑)

if(数据唯一,无序(输入顺序)){

if(需要排序){  选用TreeSet

}

else{

选用HashSet

}

}

else{

if(查询多){

选用ArrayList

}

if(增删多){  选用LinkedList

}

}

如果你知道是Set,但是不知道是哪个Set,就用HashSet。

如果你知道是List,但是不知道是哪个List,就用ArrayList。

List集合存储元素特点:

1.有序(List集合中存储有下标):存进去是这样的顺序,取出来还是按照这个顺序取出。

2.可重复

ArrayList集合底层默认初始化容量是 10. 扩大之后的容量是原容量的1.5倍.

Vector集合底层默认初始化容量也是10.扩大之后的容量是原容量的2倍.

HashMap和HashSet初始化容量都是 16,默认加载因子是0.75(在数组元素占75%时扩容)

如果优化ArrayList和Vector?

尽量减少扩容操作,因为扩容需要数组拷贝。数组拷贝很耗内存。

一般推荐在创建集合的时候指定初始化容量。

//List l = new ArrayList(500);

Set集合存储元素特点:无序不可重复

get方法:根据key算出hash值,再去查找相对应得分支,找到key.equals==true的那个对象的value返回(可以类比查字典!)

put方法:根据可以算出hash值,再去相应分支,判断key.equals,全部为false则插入,否则说明已经存在该元素了,如果hash值没有分支,则再数组中新建一个链表存储新的分支。

Set集合:HashSet

1.HashSet底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构。

2.哈希表又叫做散列表,哈希表底层是一个数组,这个数组中每一个元素

是一个单向链表。每个单向链表都有一个独一无二的hash值,代表数组的

下标。在某个单向链表中的每一个节点上的hash值是相等的。hash值实际上

是key调用hashCode方法,在通过"hash function"转换成的值。

3.如何向哈希表中添加元素:

先调用被存储的key的hashCode方法,经过某个算法得出hash值,如果在

这个哈希表中不存在这个 hash值,则直接加入元素。如果该hash值已经

存在,继续调用key之间的equals方法,如果equals方法返回false,则将

该元素添加。如果equals方法返回true,则放弃添加该元素。

4.HashSet其实是HashMap中的key部分。HashSet有什么特点,HashMap中的key 应该具有相同的特点。

SortedSet; 无序不可重复,但是存进去的元素可以按照元素大小顺序自动排列.

SortedSet集合存储元素为什么可以自动排序?

因为被存储的元素实现了Comparable接口,

SUN编写TreeSet集合在添加元素的时候,会

调用compareTo方法完成比较.


Colllection集合的UML关系图:

Map集合的UML关系图:

单向链表数据结构特点(和数组比较)

双向链表数据结构:

哈希表数据结构:

时间: 2024-10-09 11:11:07

8.13.1 集合框架, 数据结构的相关文章

集合框架(数据结构之栈和队列)

集合框架(数据结构之数组和链表)

一起学 Java集合框架、数据结构、泛型

一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个层次. 实现(类):是集合接口的具体实现.从本质上讲,它们是可重复使用的数据结构. 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序.这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现. 集合接口 序号 name 接口描述 1 Collection Col

JAVA之旅(十八)——基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用

JAVA之旅(十八)--基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用 JAVA把完事万物都定义为对象,而我们想使用数据类型也是可以引用的 一.基本数据类型的对象包装类 左为基本数据类型,又为引用数据类型 byte Byte int Integer long Long boolean Booleab float Float double Double char Character 我们拿Integer来举例子 //整

【Java】Java集合框架源码和数据结构简要分析——Set和Map

前言 之前一直把集合框架分成Collection和Map来对待,主要是基于储存内容是单列和双列,实际上这样来区分不太正确,set实际上是双列的结构. 现在回顾集合框架,看到很多当初看不到的东西. 现在来看集合框架,一部分是List,一部分是Set和Map,Set和Map几乎就是一回事. 本文假设你已经对集合框架有一定了解,关于细节请看<集合框架和Map基础>. 一.数据结构 不讲太深入的东西,实际上我也讲不了多深入. 数据结构,就是一堆数据的关系. 逻辑结构--数据逻辑上的关系,其实就是数据结

【Java】Java集合框架源码和数据结构简要分析——List

前言 之前一直把集合框架分成Collection和Map来对待,主要是基于储存内容是单列和双列,实际上这样来区分不太正确,set实际上是双列的结构. 现在回顾集合框架,看到很多当初看不到的东西. 现在来看集合框架,一部分是List,一部分是Set和Map,Set和Map几乎就是一回事. 一.数据结构 不讲太深入的东西,实际上我也讲不了多深入. 数据结构,就是一堆数据的关系. 逻辑结构--数据逻辑上的关系,其实就是数据结构,而数据的逻辑结构几乎可以分成四种:线性结构.集合结构.树形结构和图结构.

Java 集合框架(常用数据结构)

早在Java 2中之前,Java就提供了特设类.比如:向量(Vector).栈(Stack).字典(Dictionary).哈希表(Hashtable)这些类(数据结构)用来存储和操作对象组.虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题.集合框架是为表示和操作集合而规定的一种统一的标准的体系结构.除了集合,该框架(framework)也定义了几个Map接口和类.Map里存储的是键/值对.尽管Map不是collections,但是它们完全整合在集合中. 所有的集合框架都包含如下内容:

JAVA集合框架及其背后的数据结构

一:介绍:Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes .其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速.便捷的存储 store .检索retrieve .管理 manipulate ,即平时我们俗称的增删查改 CRUD .如:一副扑克牌(一组牌的集合).一个邮箱(一组邮件的集合).一个通讯录(一组姓名和电

Java基础知识强化之集合框架笔记72:集合特点和数据结构总结

1. 集合 (1)Collection(单列集合) List(有序,可重复):                         ArrayList:底层数据结构是数组,查询块,增删慢.线程不安全,效率高 Vector:底层数据结构是数组,查询快,增删慢.线程安全,效率低 LinkedList:底层数据结构是链表,查询慢,增删块.线程不安全,效率高. Set(无序,唯一): HashSet:底层数据结构是哈希表,哈希表依赖于两个方法:hashCode()和equals().   执行顺序: 首先判