集合框架List部分

来源:互联网 发布:日本男装品牌 知乎 编辑:程序博客网 时间:2024/04/30 15:59

一.collection接口

Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

常用方法:
boolean            add(E e)          添加元素

boolean            addAll(Collection c)          将指定 collection 中的所有元素都添加到此 collection 中。

 void                 clear()           移除此 collection 中的所有元素。 

boolean            contains(Object o)           如果此 collection 包含指定的元素,则返回 true。 

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

boolean            equals(Object o)           比较此 collection 与指定对象是否相等。

 int                    hashCode()           返回此 collection 的哈希码值。 

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

 Iterator            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 中所有元素的数组。

二. Iterable

对 collection 进行迭代的迭代器

 boolean          hasNext()           如果仍有元素可以迭代,则返回 true。 

E                      next()           返回迭代的下一个元素。 

void                 remove()           从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

三.List

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

仅需注意的操作:

 boolean         equals(Object o)           比较指定的对象与列表是否相等。

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

int                  hashCode()           返回列表的哈希码值。

 int                 indexOf(Object o)           返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。

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

 Object[]        toArray()           返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。

四.ArrayList

List 接口的大小可变数组的实现,其实可以理解为一个对象数组

五.LinkedList

List 接口的链接列表实现,谈到链表学过C语言的人应该知道,链表的内存空间分配不连续,靠指针连接,链表空间中存储的包括本地址的数据和下一个数据的地址。

 boolean       add(E e)           将指定元素添加到此列表的结尾。 

void              add(int index, E element)           在此列表中指定的位置插入指定的元素。

 boolean      addAll(Collection<? extends E> c)           添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。

 boolean      addAll(int index, Collection<? extends E> c)           将指定 collection 中的所有元素从指定位置开始插入此列表。 

void             addFirst(E e)           将指定元素插入此列表的开头。 

void             addLast(E e)           将指定元素添加到此列表的结尾。

 void            clear()           从此列表中移除所有元素。 

boolean      contains(Object o)           如果此列表包含指定元素,则返回 true。 

Iterator       descendingIterator()           返回以逆向顺序在此双端队列的元素上进行迭代的迭代器。 

E                 element()           获取但不移除此列表的头(第一个元素)。 

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

E                 getFirst()           返回此列表的第一个元素。

E                 getLast()           返回此列表的最后一个元素。 

int              indexOf(Object o)           返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。

 int             lastIndexOf(Object o)           返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。

 ListIterator     listIterator(int index)           返回此列表中的元素的列表迭代器(按适当顺序),从列表中指定位置开始。 

boolean    offer(E e)           将指定元素添加到此列表的末尾(最后一个元素)。 

boolean    offerFirst(E e)           在此列表的开头插入指定的元素。

 boolean   offerLast(E e)           在此列表末尾插入指定的元素。 

E               peek()           获取但不移除此列表的头(第一个元素)。 

E               peekFirst()           获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。 

E               peekLast()           获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。

 E              poll()           获取并移除此列表的头(第一个元素) 

E               pollFirst()           获取并移除此列表的第一个元素;如果此列表为空,则返回 null。 

E               pollLast()           获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。

 E              pop()           从此列表所表示的堆栈处弹出一个元素。 

void          push(E e)           将元素推入此列表所表示的堆栈。

 E             remove()           获取并移除此列表的头(第一个元素)。

 E             remove(int index)           移除此列表中指定位置处的元素。

 boolean remove(Object o)           从此列表中移除首次出现的指定元素(如果存在)。

 E            removeFirst()           移除并返回此列表的第一个元素。 

boolean removeFirstOccurrence(Object o)           从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表时)。

 E            removeLast()           移除并返回此列表的最后一个元素。 

boolean  removeLastOccurrence(Object o)           从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表时)。 

E            set(int index, E element)           将此列表中指定位置的元素替换为指定的元素。

 int        size()           返回此列表的元素数。 

Object[]  toArray()           返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组。

六.总结

1.数组和集合的区别:    数组虽然也可以存储对象,但长度是固定的,集合长度不固定

                        数组中可以存储基本数据类型,集合只能存储对象

2.集合本质:结合数据结构的内容,集合本质应该就是一个地址数组。

3.ArrayList和 LinkedList的区别:区别应该就在于内存地址的分配模式不同,ArrayList要求分配连续的地址,而LinkedList不要求,所以就产生了操作的差异性

 对于连续的地址来说,要进行增删操作,必须将后面的数据按地址往前推移或者往后推移,对于非连续的地址来说,增删只要将指向下一个数据的指针指向改变就可以。

所以如果经常进行增删的操作,采用链表,否则选择数组更为方便,尤其是查询和排序的功能。

<span style="font-family:SimSun;font-size:18px;">/* 使用LinkedList模拟一个堆栈或者队列数据结构。  堆栈:先进后出  如同一个杯子。 队列:先进先出 First in First out  FIFO 如同一个水管。  */  package test;</span>
<span style="font-family:SimSun;font-size:18px;">import java.lang.reflect.Array;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;</span>
<span style="font-family:SimSun;font-size:18px;">class Person{ private String name; private int age; Person(String name,int age){  this.name = name;  this.age=age;   } String showName(){  return this.name; } int showAge(){  return this.age; } </span>
<span style="font-family:SimSun;font-size:18px;">}</span>
<span style="font-family:SimSun;font-size:18px;">public class Collectiontest {</span>
<span style="font-family:SimSun;font-size:18px;"> public static void main(String[] args) {  // TODO 自动生成的方法存根  //初始化  ArrayList al = new ArrayList();  //添加  al.add("java01");  al.add("java02");  al.add(new Person("Jack",25));  al.add(4);  //输出。输出的哈希值暂时不处理  for(int i=0;i<al.size();i++)  {   System.out.println(al.get(i));  }  //迭代器遍历  for(Iterator iter = al.iterator();iter.hasNext();  ){    System.out.println(iter.next());  }  //初始化  LinkedList llis=new LinkedList();    llis.addFirst("java01");  llis.addFirst("java02");  llis.addFirst("java03");  llis.addFirst("java04");  llis.addFirst("java05");    System.out.println(llis);    stack(llis);    //queue(llis); } public static void stack(LinkedList l){  while(!l.isEmpty()){   System.out.println(l.removeFirst());  } } public static void queue(LinkedList l){  while(!l.isEmpty()){   System.out.println(l.removeLast());  } }}</span>







0 0
原创粉丝点击