`
IT_nice
  • 浏览: 7857 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_集合笔记1

阅读更多

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

 

1.集合概述

专业的存储对象的容器. 

具备增,删,查,改元素的操作. 

集合的优点:

可以存储任意类型的元素(暂时的优点)

可以存储任意多个元素.  相对于传统的数据,集合更加的优秀. 

2.集合体系之Collection

|---Collection(接口)

集合的顶层接口, 定义了集合的基本的规范. 

定义方法, 规范了集合的行为. 

增加:

boolean add(Object e)

一次添加一个元素

boolean addAll(Collection c) 

批量添加,将c 集合中的所有元素添加到指定集合中. 

删除:

void clear()

清空集合

boolean remove(Object o)

删除一个元素

boolean removeAll(Collection c)

批量删除, 将指定集合中包含c 集合中的所有元素删除. 

查找:

int size() 

获取集合的大小,元素的个数

isEmpty() 

检测集合是否为空. 集合中没有元素了... 

         boolean contains(Object o)  

         检测集合中是否包含指定的元素. 

boolean containsAll(Collection c)

检测集合中是否完全包含c 中的元素. 

修改:

boolean retainAll(Collection c)

修改集合, 紧保留集合和c 中相同的元素. 

取交集. 

其他:

Object[] toArray()

集合转数组. 

3. 集合体系之List(列表)

|---Collection(接口)

|---List (接口)

List 继承继承了Collection 接口. 

List 是Collection 的子类. List 更强的,具备更多个方法... 

找出List 集合中特有的方法:

List 就是依靠这些特殊的方法,实现自己的特性的... 

void add(int index, Object element)

boolean addAll(int index, Collection c) 

remove(int index) 

get(int index)  

int indexOf(Object o) 

int lastIndexOf(Object o) 

Object set(int index, Object element)

subList(int fromIndex, int toIndex) 

List 集合的特有方法都是和角标有关的.  

List 特点:

元素有序(存储有顺序,按照添加是的顺序存储),存储在List 集合中的元素都有角标. 元素可以重复.

元素有序,元素有角标,元素可以重复.  

并测试... 

4. 集合体系之ArrayList

学习集合的实现类,学习什么? 

研究实现类的实现原理...  看源码... 

基于该原理实现的实现类具备什么特点?

|---Collection(接口)

|---List (接口)

List 继承继承了Collection 接口. 

特点: 角标,元素有序,元素可重复. 

|---ArrayList(实现类)

一个类实现一个接口,要把接口中的所有方法(公共抽象的)都重写了

如果想要了解集合的实现的原理的,就需要集合的实现类. 

特点: 底层是数组实现, 数组是一块连续的内存,通过角标可以实现快速的定位,查找很快. 

但是增加和删除元素时,很慢, 元素的移动(增加和删除),和数组的扩容(增加元素,数组空间不足)

底层的数组的扩容,是以1.5倍扩容的... 

总结: 查找快,增删慢.  

在实际开发中,最为常见的一个集合... 

|---LinkedList

|---Vector 

|---Stack

练习题:

集合List 

元素有角标,有序,元素可以重复. 

既然元素可以重复, 编写程序去除ArrayList集合中存储的重复元素. 

1. 元素是字符串对象. 

2. 元素是自定义的对象. 

ArrayList 集合:

contains方法底层使用元素的equals方法 

以使用contains 检测集合中是否包含指定的元素. 

但是如果元素是自定义对象话, contains 底层使用的元素的equals 方法进行检测的. 如果自定义对象没有重写equals, contains 方法不能正常工作了.  

注意: 集合的equals 和元素的equals 是不同概念.... 

集合的equals 是比较集合是否相同. 

元素(Car, String,)的equals

5. 集合之LinkedList

|---Collection(接口)

定义了集合体系的基本的规范

|---List(子接口)

特点: 元素有角标,元素有序的,元素可以重复. 

|---ArrayList(实现类)

特点: 数组实现,查找快(内存地址连续,通过角标可以快速定位)

增删慢(元素的移动,数组的扩容)

|---LinkedList(实现类)

特点:  双向链表实现. 集合的每增加一个元素,创建出一个节点(Node)对象保存一个元素. 

     上一个节点会记录下一个节点的引用. 由于双向链表,下一个节点也会记录上一个节点的. 

 节点和节点的内存地址不连续, 查找很慢,增删快了... 

注意: LinkedList 和数组没有任何关系. 

特有方法:

由于双向的链表列表: 该集合操作集合的头和尾都很方便的... 

addFirst

addLast 

getFirst

getLast

removeFirst

removeLast 

栈:

stack

先进后出,后进先出... 

压栈

push() 

弹栈.

pop()

队列

queue 

先进先出. 

拍对, 银行排号.

排队:

offer()

出队

poll

6.集合体系值Vector 

缺陷:

JDK1.0 出现的. 

  具备自己特有方法,但是方法名太长. 

  底层也是数组实现, 数组在扩容是100% 扩容, 消耗内存.. 

  该集合是同步(集合的方法都是同步方法),在单线程在操作新低. 

解决: 

JDK1.2 Java 设计了集合体系. Collection. 并设计出了ArrayList . 

Vector 就被ArrayList 替代了. 

ArrayList 有点:

方法名短.

虽然也是数组实现,但是扩容不再是100%

集合被设计为非不同的. 不再使用同步方法了. -> 提高性能. 

注意: 如果ArrayList 遇到了多线程安全问题:

可以使用Collections.synchronizedList(List list); 将不同步的ArrayList 转换为同步的集合. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

   

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics