A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 664941114 中级黑马   /  2016-7-22 14:13  /  632 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

集合的由来:
对象是用于封装特有的数据,对象多了需要存储,如果对象的个数不确定,
  就使用集合这种容器进行存储.
集合特点:
1.用于存储对象的容器
2.集合的长度是可变的   // 数组不变
3.集合中不可以存储基本数类型值据 // 数组可以存储基本数据类型的值

容器自身都有其特定的数据结构

容器共性:Collection(集合框架中的根接口)
集合在java.util包(工具)
集合因为内部的数据结构不同,有多种具体容器,
不断地向上抽取,就形成了集合框架

框架的顶层Collection接口:
Collecction的常见方法:
1.添加
boolean b =add(E e )  e其实就是Object,能接收任意对象.
boolean b =addAll(Collection coll)
2.删除
boolean  remove(Object obj)
boolean   remove(Collection coll)
void clear();//清空

3.判断  
bollean conyains (obeject obj);
boolean containsAll(Collection coll);
boolean isEmpty();//判断集合是否有元素
4.获取:
获取集合的元素个数
int size();
获取集合中元素的个数:
迭代器(专门用于取出集合中元素的方式)

Iterator a = iterator();
该对象必须依赖于具体的容器,因为每个容器中的数据结构都不同
所以该迭代器对象是在容器中内部实现的
对于使用容器这而言,具体的实现不重要,只要通过容器获取到该实现的迭代器对象即可.
也就是iterator方法.
Iterator 接口也就是对所有的Collection容器进行元素取出的公共接口.
for (Iterator it = coll.iterator(); it.hasNext();) {
                System.out.println(it.next());
               
        }
//依赖于子类(内部类)实现的,每个容器中有自己的数据结构

在迭代过程中不要使用集合操作元素,容易出现异常
java.util.ConcurrentModificationException 异常
可以使用Iterator接口的子接口ListIterator来完成在迭代中队元素进行更多的操作
只有list有listIterator迭代方法
ListIterator可以实现在迭代过程中对元素的增删改查
注意:只有list集合具备该迭代功能
while(lit.hasPrevious()){
                System.out.println("previous:"+lit.previous());//反向输出
        }
listIterator() //从头开始
listIterator(int index) //从指定角标开始


5.其他方法
retainAll(Collection coll) 取交集
Objicet[]   toArray();将集合变为数组
-------------------------------------------------------------------------------------------
===========================================================================================

Collection下两大子体系|--List:有序(存入和取出的顺序一致),   
                              元素都有索引(角标)
                              元素可以重复

                      |--set: 元素不能重复.
                              无序.(有可能会有序)

list:特有的常见方法:有一个共性特点都可以操作角标

可以完成对元素的增删改查.
1,添加
void add(int index,element);
void add(int index,Collection);

2.删除
Object remove(index);

3.修改
Object set(index,element)

4.获取
Object get(index)
int indexOf(object)
int lastIndexOf(object)
List subList(from,to)

list(有角标)集合下三个常用的子类对象:
可变数组的原理,创建一个新数组,将原来的数组放到新数组中来
1.0出现|--vector:内部是数组数据结构. 同步的,线程安全,效率低(几乎不用)100%延长
                  增删查询都很慢               

        |--ArrayList:内部是数组数据结构,增删速度不快,查找元素的速度快查询速度快,增删慢,是不同步的,效率高,替代了vector   50%延长















        |--LinkedList:链接列表实现,简称链表. 内部是链表数据结构,是不同步的,增删元素的速度非常快,查询慢 ,有角标

--------LinkedList link = new LinkedList();
link.addFirst("abc1");
link.addFirst("abc1");
link.addFirst("abc1");
link.addFirst("abc1");
while(!(link.isEmpty())){
syso(link.removeFirst());
}

addFirst();
addLast();
jdk 1.6
offerFirst();
offerLast();

getFirst(); //获取但不移除,如果次链表为空,抛出异NoSuchElementException
getLast();
jdk1.6
peekFirst();获取但不移除,如果次链表为空,返回null
peekLast();

removeFirst(); //获取并移除,如果次链表为空,抛出异NoSuchElementException
removeLast();

pollFirst();;获取并移除,如果次链表为空,返回null
pollLast();

=======================================================
set :元素不可重复,是无序的
set接口中的方法跟Collection一致

子类对象
|---HashSet  内部数据结构是哈希表,是不同步的.



|



1 个回复

倒序浏览
66666666....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马