黑马程序员 06 集合_List_Set_Map

------- android培训java培训、期待与您交流! ----------

1:集合

(1)java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储。
  而对多个元素进行存储,前面我们学习过数组,数组的弊端,长度固定。这样,数组将不能
  满足变化的要求。所以,java就提供了集合供我们使用。
(2)集合的特点:
A:长度可以发生改变
B:只能存储对象
C:可以存储多种类型对象(一般存储的还是同一种)
(3)集合和数组的区别
A:长度问题
数组固定
集合可变
B:存储元素问题
数组可以是基本类型,也可以是引用类型。
集合只能是引用类型。
C:是否同一类型
数组元素类型一致。
集合元素类型可以不一致。
(4)集合体现的由来
集合是存储多个元素的容器,但是,由于数据结构不同,java就提供了多种集合类。
而这多种集合类有共性的功能,所以,通过不断的向上抽取,最终形成了集合体系
结构。


数据结构:数据存储的方式。


Collection
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
(5)如何学习和使用一个继承体系呢?
学习顶层:因为顶层定义的是共性内容。
使用底层:因为底层才是具体的实现。


2:Collection的功能
(1)Collection的功能
A:添加功能
boolean add(Object obj):
boolean addAll(Collection c):
B:删除功能
void clear():
boolean remove(Object obj):
boolean removeAll(Collection c):
C:判断功能
boolean isEmpty():
boolean contains(Object obj):
boolean containsAll(Collection c):
D:遍历功能
Iterator iterator():
E:长度功能
int size():
F:交集功能
boolean retainAll(Collection c):
G:转换功能
Object[] toArray():
(2)迭代器的使用
A:使用步骤
a:通过集合对象获取迭代器对象。
b:通过迭代器对象判断。
c:通过迭代器对象获取。
B:迭代器原理
由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。
这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种

集合的时候,只要该集合内部实现这个接口即可。

3:List的特有功能
(1)List的特有功能
A:添加功能
void add(int index,Object obj):
B:删除功能
Object remove(int index):
C:修改功能
Object set(int index,Object obj):
D:获取功能
Object get(int index):
int indexOf(Object obj):
ListIterator listIterator():
(2)List的遍历方式
A:Iterator迭代器
B:ListIterator迭代器
C:普通for
(3)ListIterator迭代器
A:是Iterator的子接口。
B:有自己的特有功能,可以逆向遍历数据,但是需要先正向遍历。一般不用。

(1)Set的特点:
元素无序,唯一。
注意:这里的顺序是指存储和取出顺序。


2:HashSet
(1)HashSet:不保证元素的迭代顺序。并且,不保证该顺序恒久不变。
(2)怎么保证的呢?
HashSet底层数据结构是哈希表。
它依赖两个方法:hashCode()和equals()
顺序:
首先,判断hashCode()值是否相同。
相同:
继续走equals()方法,根据其返回值:
true:说明元素重复,不添加到集合。
false:说明元素不重复,添加到集合。
不同:直接添加到集合。
(3)怎么重写hashCode()和equals()方法呢?
hashCode():
把对象的所有成员变量值相加即可。
如果是基本类型,就加值。如果是引用类型,就加哈希值。
equals():
A:this==obj
B:!(obj instanceof Student)
C:所有成员变量的值比较。基本类型用==,引用类型用equals()。


如果不会,自动生成。



3:TreeSet
(1)TreeSet:根据构造方法的不用,选择使用自然排序或者比较器排序。
           按照实际的需求,可以对元素进行排序。并且保证唯一。
(2)怎么保证的呢?
排序:底层结构是二叉树。按照树节点进行存储和取出。
两种实现:
A:自然排序(元素具备比较性)
TreeSet的无参构造,要求对象所属的类实现Comparable接口。
B:比较器排序(集合具备比较性)
TreeSet的带参构造,要求构造方法接收一个实现了Comparator接口的对象。
唯一:根据返回值是否为0。

注意:
如果同时有两种方案,以谁为主呢?以比较器为主。


4:Collection体现的集合总结
Collection
|--List
|--ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高。
|--LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低。
|--Set 唯一
|--HashSet
底层数据结构是哈希表。
如何保证元素唯一性呢?
依赖两个方法。hashCode()和equals()。
以后都自动生成。
|--TreeSet
底层数据结构是二叉树。
如何保证元素唯一性呢?如何保证元素排序呢?
根据返回值是否是0,判断元素是否重复。
排序有两种方案:
元素具备比较性 实现Comparable接口
集合具备比较性 实现Comparator接口


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


增强for语句

    格式:

   for(数据类型变量名: 数组或集合)

    {

       执行语句;

    }

    简化了对数组,集合的遍历。

Collection定义了集合框架的共性功能:

    1,添加

          add(e);

          addAll(collection);

    2,删除

          remove(e);

          removeAll(collection);

          clear();

    3,判断

         contains(e);

          isEmpty();

    4,获取

          iterator();

          size();

    5,获取交集

          retainAll();

    6,集合变数组

          toArray();

    1, add方法的参数类型是Object。以便于接收任意类型对象。

    2, 集合中存储的都是对象的引用(地址)

Map集合:

    该集合存储键值对,一对一对往里存,而且要保证键的唯一性。

    1,添加。

   put(Kkey, V value)

   putAll(Map<?extends K,? extends V> m)

    2,删除。

   clear()

   remove(Objectkey)

    3,判断。

   containsValue(Objectvalue)

   containsKey(Objectkey)

   isEmpty()

    4,获取。

   get(Objectkey)

   size()

   values()

   entrySet()

   keySet()

   Map

   Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。

   HashMap:底层是哈希表数据结构,允许使用 null值和 null键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。

   TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

    和Set很像。其实大家,Set底层就是使用了Map集合。

Map合的两种取出方式:

    1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。所有可以迭代方式取出所有的键,在根据get方法。

    获取每一个键对应的值。

   Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。

    2,Set<Map.Entry<k,v>>entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry

   Entry其实就是Map中的一个static内部接口。

-------  android培训 java培训 、期待与您交流! ----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值