一、 集合的体系:

 ----------| Collection 单列集合 的根接口

 --------------|  List  如果是实现了List接口的集合类,该集合类具备的特点:有序,可重复。

 --------------|  Set   如果是实现了Set接口的集合类,该集合类具备的特点: 无序,不可重复。

有序:集合的有序不是指自然顺序,而是指添加进去的顺序与元素出来的顺序是一致的。

List接口中特有的方法具备的特点: 操作的方法都存在索引值。    

只有List接口下面的集合类才具备索引值。其他接口下面的集合类都没有索引值。

 

二、List接口中特有方法:

         添加

                  add(intindex, E element) 把元素添加到集合中的指定索引值位置上

                  addAll(intindex, Collection<? extends E> c) 把c的元素添加到此集合指定索引值的位置上

         获取:

                  get(intindex)

                  indexOf(Objecto)  找出指定元素第一次出现在集合中 的索引值

                  lastIndexOf(Objecto) 找出指定元素最后一次出现在集合中的索引值

                  subList(intfromIndex, int toIndex) 指定开始与结束的索引值截取集合中的元素

         修改:

                  set(intindex, E element) 使用指定的元素替换指定索引值位置的元素

         迭代

listIterator()
 */
package cn.itcast.list;
import java.util.ArrayList;
import java.util.List;                
public class Demo2 {
         publicstatic void main(String[] args) {
                  Listlist=  new ArrayList();
                  list.add("狗娃");
                  list.add("狗剩");
                  list.add("铁蛋");  //把元素添加到集合的末尾处。
                  list.add("狗娃");
//添加方法
                  list.add(1,"赵本山"); // 把元素添加到集合中的指定索引值位置上。
                  Listlist2 = new ArrayList();
                  list2.add("本山");
                  list2.add("小沈阳");
                  list.addAll(2,list2);//把list2的元素添加到list集合指定索引值的位置上。                
//获取的方法
                  System.out.println("get方法获取元素:"+list.get(1));//根据索引值获取集合中的元素
                  使用get方法遍历集合的元素:
                  for(int i = 0; i < list.size() ; i++) {
                          System.out.print(list.get(i)+",");
                  }
                  System.out.println("找出指定元素第一次出现在集合中的索引值:"+ list.indexOf("本山"));
                  System.out.println("找指定的元素最后一次出现在集合中的索引值:"+list.lastIndexOf("狗娃"));
                  ListsubList = list.subList(1, 3); //指定开始与结束的索引值截取集合中的元素。
                  System.out.println("子集合的元素是:"+subList);
                  list.set(3,"赵本山"); //使用指定的元素替换指定索引值位置的元素。
                  System.out.println("集合的元素:"+list);
         }
}
 
/*

迭代

迭代器在变量元素的时候要注意事项:在迭代器迭代元素的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。

如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常。        

 迭代元素 的过程中: 迭代器创建到使用结束的时间。

listIterator()

ListIterator特有的方法:

         添加:

                  hasPrevious()  判断是否存在上一个元素。

                  previous()    当前指针先向上移动一个单位,然后再取出当前指针指向的元素。

                  next();  先取出当前指针指向的元素,然后指针向下移动一个单位。

---------------------------  

                  add(Ee)   把当前有元素插入到当前指针指向的位置上。

                  set(Ee)   替换迭代器最后一次返回的元素。

*/
package cn.itcast.list;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Demo3 {
         publicstatic void main(String[] args) {
                  Listlist = new ArrayList();
                  list.add("狗娃");
                  list.add("狗剩");
                  list.add("铁蛋");
                  list.add("美美");
                  
                  ListIteratorit = list.listIterator(); //返回的是一个List接口中特有的迭代器
                  /*System.out.println("有上一个元素吗?"+it.hasPrevious());
                  System.out.println("获取上一个元素:"+it.previous());
                  it.next();
                  System.out.println("获取上一个元素:"+it.previous());
                  while(it.hasNext()){
                          it.next();
                  }
                  while(it.hasPrevious()){
                          System.out.println("元素:"+it.previous());
                  }
                  it.next();
                  it.next();
                  it.add("张三");
                  */
                  it.next();
                  it.next();
                  it.set("张三");
                  System.out.println("集合的元素:"+list);          
         }
}


三、List接口的实现类

--------------------| ArrayList  

--------------------| LinkedList

--------------------| Vector(了解即可)底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。

ArrayList 底层是维护了一个Object数组实现 的, 特点: 查询速度快,增删慢。

什么时候使用ArrayList: 如果目前的数据是查询比较多,增删比较少的时候,那么就使用ArrayList存储这批数据。  比如 :高校的 图书馆

ArrayList 特有的方法:

ArrayList

ArrayList

笔试题目:使用ArrayList无参的构造函数创建一个对象时, 默认的容量是多少? 如果长度不够使用时又自增增长多少?

         ArrayList底层是维护了一个Object数组实现 的,使用无参构造函数时,Object数组默认的容量是10,当长度不够时,自动增长0.5倍。

 

 

LinkedList底层是使用了链表数据结构实现的,  特点: 查询速度慢,增删快。。

Linkedlist特有的方法:

         1:方法介绍

                     addFirst(E e) 把元素添加到集合的首位置上

                                   addLast(Ee) 把元素添加到集合的末尾处。

                 

                                   getFirst()获取集合中首位置的元素

                                   getLast()获取集合中末尾的元素

                                  

                                   removeFirst()删除集合中的首位置元素并返回

                                   removeLast()删除集合中的末位置元素并返回

        

         2:数据结构

                                   1:栈 (1.6)  : 主要是用于实现堆栈数据结构的存储方式。

                                            先进后出

                                            push()将该元素插入此集合的开头处。

                                            pop()移除并返回集合中的第一个元素

                                   2:队列(双端队列1.5): 主要是为了让你们可以使用LinkedList模拟队列数据结构的存储方式。

                                            先进先出

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

                                            poll()   删除集合的首元素:

                                           

         3:返回逆序的迭代器对象     

descendingIterator()   返回逆序的迭代器对象
*/
 
public class Demo8 {
         
         publicstatic void main(String[] args) {
                  LinkedList list= new LinkedList();
                  list.add("张三");
                  list.add("李四");
                  list.add("王五");              
                  list.push("狗娃");   //将该元素插入此集合的开头处。
                  System.out.println("删除集合的首元素:"+list.pop());// 移除并返回集合中的第一个元素
                  list.offer("狗剩");
                  System.out.println("删除集合的首元素:"+list.poll());
         
                  System.out.println("集合中的元素:"+list);
                  */     
                  Iterator  it = list.descendingIterator();
                  while(it.hasNext()){
                          System.out.println(it.next());
                  }
         }
}