Java无难事08

1、集合框架:
所谓框架就是一个类库的集合。集合框架就是一个用来表示和操作集合的统一的架构,包含了实现集合的接口与类。
在这里插入图片描述

2、集合框架中的接口
Collection:集合层次中的根接口,JDK没有提供这个接口直接的实现类;(是所有单列集合的父接口)
Set:不能包含重复的元素。SortedSet是一个按照升序排列元素的Set;
List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式;
Map:包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map;

3、集合框架中的实现类
ArrayList:(是util中的一个类)我们可以将其看作是能够自动增长容量的数组;
利用ArrayList的toArray()返回一个数组;
Arrays.asList()返回一个列表;
在这里插入图片描述
迭代器(Iterator)作用:对于有一些集合类没有提供get()操作时,可以通过返回一个迭代器去迭代集合中的元素;
在这里插入图片描述
给我们提供了一种通用的方式来访问集合中的元素;
在这里插入图片描述在这里插入图片描述
Collections类:
排序:Collections.sort(List list)(按升序对指定的列表进行排序,遵照自然排序法)
调用sort()方法时,列表中所有的元素都必须实现了Comparable接口,实现这个接口要实现compareTo方法,实现这个方法:如果你的对象大于要比较的对象,返回一个正数,等于要比较的对象,返回0,小于要比较的对象,返回一个负数;
在这里插入图片描述
Collections.sort(List list,Comparator C):实现比较器(Comparator)接口;让列表遵照比较器中设定的排序方式进行排序
在这里插入图片描述
在这里插入图片描述
取最大和最小的元素:Collections.max()、Collections.min();
在这里插入图片描述
在已排序的List中搜索指定的元素:Collections.binarySearch()。
在这里插入图片描述
LinkedList:是采用双向循环链表实现的;
利用LinkedList实现栈(stack)、队列(queue)、双向队列(double-ended queue);
LinkedList方法:addFirst(Object o):在列表开始处插入指定元素;
addLast(Object o):在列表的结尾处添加指定元素;
getFirst():返回列表的第一个元素;
getLast():获取列表的最后一个元素;
remove(int index):从列表中移走一个元素;
removeFirst():移走列表中第一个元素并返回这个元素;
removeLast():移走列表中最后一个元素并返回这个元素;
isEmpty():判断是否包含元素,返回Boolean;

4、数据结构:
一般数据结构分为两大类:线性数据结构和非线性数据结构。线性数据结构有线性表、栈、队列、串、数组和文件;非线性数据结构有树和图;

5、线性表:
线性表的逻辑结构是n个数据元素的有限序列:(a1,a2,a3…an)
N为线性表的长度,n=0的表称为空表。
数据元素呈线性关系。必存在唯一的称为“第一个”的数据元素;必存在唯一的称为“最后一个”的数据元素;除第一个元素外,每个元素都有且只有一个前驱元素;除最后一个元素外,每个元素有且只有一个后继元素。
所有数据元素在同一线性表中必须是相同的数据类型;
线性表按其存储结构可分为顺序表和链表。用顺序存储结构存储的线性表称为顺序表;用链式存储结构存储的线性表称为链表;
将线性表中的数据元素依次存放在某个存储区域中,所形成的表称为顺序表。一维数组就是用顺序方式存储的线性表;

6、链表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、栈:
栈(Stack)也是一种特殊的线性表,是一种后进先出(LIFO)的结构;
栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶(top),表头称为栈底(bottom);
栈的物理存储可以用顺序存储结构,也可以用链式存储结构
在这里插入图片描述
在这里插入图片描述
(通过LinkedList实现栈)

8、队列:(先进先出)
在这里插入图片描述
在这里插入图片描述
(通过LinkedList实现队列)

9、ArrayList和LinkedList的比较:
ArrayList底层采用数组完成,而LinkedList则是以一般的双向链表完成,其内每个对象除数据本身外,还有两个引用,分别指向前一个元素和后一个元素;
如果我们经常在List的开始处增加元素,或者在List中进行插入和删除操作,我们应该使用LinkedList,否则的话,使用ArrayList将更加快速(ArrayList可以随机访问)

10、HashSet:
实现Set接口的hash table(哈希表),依靠HashMap来实现;
我们应该为要存放到散列表(哈希表)的各个对象定义hashCode()和equals()。
HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。当向HashSet集合中添加一个对象时,首先会调用该对象的hashCode()方法来确定元素的存储位置,然后再调用对象的equals()方法来确保该位置没有重复元素。
在这里插入图片描述

11、TreeSet:
TreeSet是依靠TreeMap来实现的;
TreeSet是一个有序集合,TreeSet中的元素将按照升序排列,缺省按照自然顺序进行排列,意味着TreeSet中的元素要实现Comparable接口;
我们可以在构造TreeSet对象时,传递实现了Comparator接口的比较器对象;在这里插入图片描述
在这里插入图片描述
12、HashSet和TreeSet的比较:
HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet。

13、HashMap:
是实现了Map接口的哈希表;这个实现提供了所有的可选的map操作,允许空值和空键;put(Object key,Object value)方法放置值,get(Object key)获取值;
HashMap对key进行散列;
keySet()返回HashMap键的视图,返回值Set;
values()返回HashMap值的视图,返回值Collection;
entrySet()返回键值对的视图,返回值Set。
在这里插入图片描述
在这里插入图片描述
14、TreeMap:
TreeMap按照key进行排序;
用法与HashMap基本相同;

15、HashMap和TreeMap的比较:
和Set类似,HashMap的速度通常都比TreeMap快,只有在需要排序的功能的时候,才使用TreeMap。

16、Properties
在这里插入图片描述

17、在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的。在jdk1.2之后,就出现许许多多非线程安全的类。 下面是这些线程安全的同步的类:
vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。
statck:堆栈类,先进后出
hashtable:就比hashmap多了个线程安全
enumeration:枚举,相当于迭代器
除了这些之外,其他的都是非线程安全的类和接口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值