2018-03-28

2018-04-24  本文已影响2人  姜水伟杰

集合框架

集合

数组和集合的区别?

A:长度区别
数组的长度固定
集合长度可变
B:内容不同
数组内存是同一种类型的元素
而集合可以储存不同类型的元素
C:元素的数据类型问题
数组可以储存基本类型,也可以储存引用类型
集合只能储存引用类型(原因是因为集合是泛型类,会有边界擦除)

集合体系

Collection和Collections的区别

集合小问题

(1) Map和Collection的区别?
A:Map 是由键值对组成的集合,Map的键(key)是唯一的,值(value)可以重复。
B:Collection 是有单列数据组成的集合,它的儿子List是可以重复的,Set是唯一的。

(2) HashMap和Hashtable的区别?
HashMap:线程不安全,效率高。允许null键和值。
Hashtable:线程安全,效率低。不允许null键和值。
(3)List,Set,map等接口是否都继承自Map接口
List,Set不是继承自Map接口,他们继承自Collection接口
Map接口本身就是一个顶层接口。

(4)在集合中的数据结构问题
ArrayXxx:底层数据结构是数组。查询快,增删慢。
LinkedXxx:底层数据结构是链表。查询慢,增删快。
HashXxx:底层数据结构是哈希表。跟两个有关。hashCode()和equals()
TreeXxx:底层数据结构是二叉树。两种排序方式。Comparable接口和Comparator接口

Map(双列集合)

Map接口的三个子类的特点
HashMap
      底层数据结构是哈希表。
      线程不安全,效率高。允许null键和值
Hashtable
      底层数据结构是哈希表。
      线程安全,效率低。不允许null键和值
TreeMap
      底层数据结构是二叉树。
      线程不安全,效率高。

Collection 单列集合体系:

List的特点:元素可重复,有序 (通过索引操作)            
Set的特点:元素无序,唯一。(这里的顺序是指存储和取出顺序)         

常用子类

List接口的三个子类的特点
    ArrayList
        底层数据结构是数组,查询快,增删慢
        线程不安全,效率高
    Vector
        底层数据结构是数组,查询快,增删慢
        线程安全,效率低
    LinkedList
        底层数据结构是链表,查询慢,增删快
        线程不安全,效率高

到底使用谁?根据需求看

重写emphasized textequqls三个步骤
1. 判断是否为同一个对象(提高效率)
2. 判断是否为该类的对象(提高健壮性)
3. 向下转型,然后根据需求比较成员变量

Vector 成员方法
public void addElement(Object obj) 添加
public Object elementAt(int index) 获取
public Enumeration elements() 获取
public int size() 长度

有自己的特殊功能。但是不用,被新功能给替代了。
A:添加功能。
void addElement( Object obj )
B:获取功能。
public Object elementAt( int index )
public Enumeration elements()
类Enumeration里边有两个方法。(类似于迭代器)
boolean hasMoreElements()
Object nextElement()
public int size()
JDK版本升级考虑的因素:A:安全。B:效率。C:简化书写。

有自己的特殊功能。可以很方便的操作头和尾。
A:添加功能
void addFirst( Object o ):将指定元素插入此列表的开头。
void addLast( Object o ):将指定元素添加到此列表的结尾。
B:获取功能
Object getFirst()
Object getLast()
C: 删除功能
Object removeFirst()
Object removeLast()

Set接口子类的特点
常用子类
HashSet
        底层数据结构是哈希表。
        线程不安全,效率高。
TreeSet
        底层数据结构是二叉树。
        线程不安全,效率高

迭代器的使用

List list = new ArrayList();
  list.add(1);
  list.add(3);
  Iterator iterator = list.iterator();
  while(iterator.hasNext()){
      Integer next = (Integer)iterator.next();
      System.out.println(next);
         }

Iterator迭代器

常见问题

并发修改异常

拆箱与装箱

来源:基本类型的数值不是对象,不能调用对象的toString()、hashCode()、getClass()、equals()等方法。所以Java提供了针对每种基本类型的包装类型。
装箱就是 自动将基本数据类型转换为包装类型;
拆箱就是 自动将包装类型转换为基本数据类型。
下表是基本数据类型对应的包装器类型:

基本数据类型 包装类型
int(4字节) Integer
byte(1字节) Byte
short(2字节) Short
long(8字节) Long
float(4字节) Float
double(8字节) Double
char(2字节) Character
boolean(未定) Boolean

包装类与基本类型的区别

上一篇 下一篇

猜你喜欢

热点阅读