java集合


数组和集合的区别
区别1 :
数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
区别2:
数组长度是固定的,不能自动增长
集合的长度的是可变的,可以根据元素的增加而增长

好了,现在我们来从Colletion接口看起:

方法摘要 

//添加集合元素的操作


 boolean add(E o) 
          确保此 collection 包含指定的元素(可选操作)。 
 boolean addAll(Collection<? extends E> c) 
          将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 

///清空集合的操作


 void clear() 
          移除此 collection 中的所有元素(可选操作)。 


//判断集合是否包含指定元素的操作


 boolean contains(Object o) 
          如果此 collection 包含指定的元素,则返回 true。 
 boolean containsAll(Collection<?> c) 
          如果此 collection 包含指定 collection 中的所有元素,则返回 true。 


 ///判断集合是否为空


 boolean isEmpty() 
          如果此 collection 不包含元素,则返回 true。 


///得到迭代器为集合的遍历做准备


 Iterator<E> iterator() 
          返回在此 collection 的元素上进行迭代的迭代器。 


/删除指定元素

 boolean remove(Object o) 
          从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 
 boolean removeAll(Collection<?> c) 
          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 
 boolean retainAll(Collection<?> c) 
          仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 


 int size() 
          返回此 collection 中的元素数。 
 Object[] toArray() 
          返回包含此 collection 中所有元素的数组。 

Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");

Iterator it = c.iterator();                     //获取迭代器的引用
while(it.hasNext()) {                           //集合中的迭代方法(遍历)
    System.out.println(it.next());
}



好了,Collection接口的方法也看的差不多了,下面让我们来瞅瞅List接口中增加的方法:

void add(int index, E element) 
          在列表的指定位置插入指定元素(可选操作)。 

boolean addAll(int index, Collection<? extends E> c) 
          将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。 

 E get(int index) 
          返回列表中指定位置的元素。 

 E set(int index, E element) 
          用指定元素替换列表中指定位置的元素(可选操作)。 

 ListIterator<E> listIterator() 
          返回列表中元素的列表迭代器(以正确的顺序)。 

E remove(int index) 
          移除列表中指定位置的元素(可选操作)。 

好了,让我们来看一个案例:

需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。

List list = new ArrayList();
list.add("a");
list.add("b");
list.add("world");
list.add("d");
list.add("e");

/*Iterator it = list.iterator();
while(it.hasNext()) {
    String str = (String)it.next();
    if(str.equals("world")) {
        list.add("javaee");         //这里会抛出ConcurrentModificationException并发修改异常所以我们得用ListIterator类对象
    }
}*/
ListIterator类的函数:

 void add(E o) 
          将指定的元素插入列表(可选操作)。 
 boolean hasNext() 
          以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。 
 boolean hasPrevious() 
          如果以反向遍历列表,列表迭代器有多个元素,则返回 true。 
 E next() 
          返回列表中的下一个元素。 
 int nextIndex() 
          返回对 next 的后续调用所返回元素的索引。 
 E previous() 
          返回列表中的前一个元素。 
 int previousIndex() 
          返回对 previous 的后续调用所返回元素的索引。 
 void remove() 
          从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。 
 void set(E o) 
          用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。 

我们可以这样写:

ListIterator lit = list.listIterator();     //如果想在遍历的过程中添加元素,可以用ListIterator中的add方法
while(lit.hasNext()) {
    String str = (String)lit.next();
    if(str.equals("world")) {
        lit.add("javaee");  
        //list.add("javaee");
    }
}
三个子类的区别:

ArrayList:
    底层数据结构是数组,查询快,增删慢。
    线程不安全,效率高。
Vector:
    底层数据结构是数组,查询快,增删慢。
    线程安全,效率低。
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
LinkedList:
    底层数据结构是链表,查询慢,增删快。
    线程不安全,效率高。


Vector和ArrayList的区别
    Vector是线程安全的,效率低
    ArrayList是线程不安全的,效率高
共同点:都是数组实现的
ArrayList和LinkedList的区别
    ArrayList底层是数组结果,查询和修改快
    LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的


集合框架(LinkedList的特有功能)(掌握)
A:LinkedList类概述
B:LinkedList类特有功能
public void addFirst(E e)及addLast(E e)
public E getFirst()及getLast()
public E removeFirst()及public E removeLast()
public E get(int index);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值