死亡笔记2--java中的集合详解

集合


集合和数组的区别?


数组:数组既可以储存基本数据类型,也可以储存引用类型.它储存引用类型的数组的时候叫对象数组.数组长度固定,而且只能储存一种类型.
集合:集合只能储存引用类型,但是集合的长度可变,集合可以存储不同数据类型.


集合的集成体系结构?
由于需求不同,java提供了不同的集合类,着多个集合类的数据结构不同,但是他们都是提供供存储和遍历功能的.
我们把他们的共性不断的向上提取,最终就形成了集合的继承体系结构图.


Collection
           |--List
          |--ArrayList
  |--Vector
  |--LinkedList
|--Set
  |--HashSet
  |--TreeSet


java提供了各种集合类,他们的数据结构不同.但是,他们肯定有共性的内容(存储,获取,判断等),通过不断的向上提取,我们就能得到一个集合的继承体系结构,这个体系的老大是:Collection


Collection存储自定义对象并遍历:
public class Student{
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public String toString(){
return name+"----"+age;
}
}   
public class StudentDemo{
public static void main(String[] args){
//创建集合对象
Collection c=new ArrayList();

//创建学生对象,并添加到集合
c.add(new Student("孙悟空",21));
c.add(new Student("猪八戒",20));
c.add(new Student("沙僧",18));
c.add(new Student("唐僧",30));
//遍历结合

Iterator iterator=c.Iterator();
while(iterator.hasNext()){
System.out.println((Student)iterator.next().toString);
}
}
}
迭代器中的并发修改异常:
出现的原因:迭代器遍历集合,集合修改集合元素
解决方案
迭代器遍历:使用List专有的迭代器(ListIterator)
集合遍历:集合修改(size()和get())

常见数据结构:
A:栈 先进后出
B:队列 先进先出
C:数组 查询快,增删慢
D:链表 查询满,增删快

List的子类特点(面试题)
ArrayList:底层数据结构是数组,查询快,增删慢
 线程不安全,效率高
 
Vector:底层数据结构是数组,查询快,增删慢
  线程安全,效率高
  
LinkedList:底层数据结构是链表,查询慢,增删快
  线程不安全,效率低
  
泛型:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊类型.
也被称作参数化类型,把类型当做参数一样传递

格式:<数据类型>  注意:概述类型只能是引用类型


泛型在那些地方使用呢?
看API,如果类 结构 抽象类后面跟的有<E>就要使用泛型,一般就在集合中使用
好处:把运行时期的问题提前到了编译时期(编译原则)
避免了强制类型转换
优化了程序设计,解决了黄色警告先问题,让程序更安全


泛型的高级通配符:
? 任意的类型都可以
? extends E 向下限定,E及其子类
? super E 向上限定,E及其父类


增强for循环:
是for循环的一种
格式:for(元素的数据类型 变量名:数组或者Collection集合的对象){}
好处:简化了数组和集合的遍历
弊端:增强for循环的目标不能为null,建议在使用前,先判断是否为null值


Set集合:
Set集合的特点:无序,唯一


HashSet:底层数据结构是哈希表(是一个元素为链表的数组)
哈希表底层依赖两个方法:hashCode()和equals()
注意:在添加自定义对象时,HashSet底层以来的是hashCode()和equals()方法,而这两个方法在自定义对象中没有重写,所以默认使用的是Object类中的方法,这个时候他们的哈希值是不会一样的,
所以就不会判断 直接添加.
执行顺序:
首先比较哈希值是否相同
不相同就添加
相同:继续执行equal()方法
返回ture:元素重复了,不添加
返回false:直接把元素添加到集合


如何保证元素的唯一性呢?
由hashCode()和equals()保证的


TreeSet集合:
底层数据结构是红黑树(一种自平衡的二叉树)
保证元素的排列方式:
自然排序:让元素所属的类实现Comparable接口
比较器排序:让集合构造方法接受Comparator的实现类对象


Map集合:
将键映射到值的对象.一个雷蛇不能包含重复的键;每个键最多只能映射到一个值
Map和Collection的区别?
map存储的是键值对形式的元素,键唯一,值可以重复. 夫妻对
Collection存储的是单独出现的元素,子接口Set元素唯一,子结构List元素可重复


Map集合的遍历:
1 键找值  
          获取所有键的集合
 遍历键的集合,得到每一个键
 根据键到集合中去找值
 
2 键值对对象找键和值
     获取所有的键值对对象
 遍历键值对对象的集合,获取每一个键值对对象
 根据键值对对象去获取键和值


Collections工具类:
是针对集合进行操作的工具类
面试题:Collection和 Collections的区别?
Collection是单列集合的顶层接口,有两个子接口List和Set
Collections是针对集合进行操作的工具类,可以对集合进行排序和查找


面试题:List,Set和Map等接口是否都继承自Map接口?
List和Set不是继承自Map接口,他们继承自Collection接口
Map接口本事就是一个顶层接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值