黑马程序员——JAVA基础之List集合

来源:互联网 发布:刷帮豆软件怎么下载 编辑:程序博客网 时间:2024/05/22 10:25

 

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

 

Collection :


    |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
        |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
        |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
        |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
    |--Set:元素是无序,元素不可以重复。


List:
    特有方法。凡是可以操作角标的方法都是该体系特有的方法。
 

    add(index,element); 在列表的指定位置插入指定元素

    addAll(index,Collection); 将指定 collection 中的所有元素都插入到列表中的指定位置

 

import java.util.ArrayList;public class ListDemo {public static void main(String[] args){ArrayList al = new ArrayList();al.add("01");al.add("02");al.add("03");System.out.println(al);al.add(1,"04");System.out.println(al);ArrayList al1 = new ArrayList();al1.add("05");al1.add("06");System.out.println(al1);al.addAll(1,al1);System.out.println(al);}}

 


删 

    remove(index); 移除列表中指定位置的元素

 

 

import java.util.ArrayList;public class ListDemo {public static void main(String[] args){ArrayList al = new ArrayList();al.add("01");al.add("02");al.add("03");System.out.println(al);al.remove(1);System.out.println(al);}}

 



 

     set(index,element); 用指定元素替换列表中指定位置的元素

 

 

import java.util.ArrayList;public class ListDemo {public static void main(String[] args){ArrayList al = new ArrayList();al.add("01");al.add("02");al.add("03");System.out.println(al);al.set(1,"04");System.out.println(al);}}

 

 



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

    subList(from,to); 返回列表中指定的之间的部分,包含头不包含尾

    listIterator(); 返回此列表元素的列表迭代器(按适当顺序)。

    int indexOf(obj):获取指定元素的位置。

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

 

 

import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** *  * 获取集合中元素的方法演示 * */public class ListDemo {public static void main(String[] args){ArrayList al = new ArrayList();al.add("01");al.add("02");al.add("03");System.out.println(al);List sub = al.subList(0,2);System.out.println(sub);System.out.println("01 对应的角标是:"+al.indexOf("01"));for (int i=0;i<al.size();i++)//方法一{System.out.println(al.get(i));}for (Iterator it = al.iterator();it.hasNext(); )//方法2{System.out.println(it.next());}}}

 


List集合特有的迭代器。ListIterator是Iterator的子接口。
 
        在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以,在迭代器时,只能用迭代器的方法操作元素,可是 Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的listIterator方法获取。

 

 

import java.util.ArrayList;import java.util.ListIterator;/** *  * ListIterator演示 * */public class ListDemo {public static void main(String[] args){ArrayList al = new ArrayList();al.add("01");al.add("02");al.add("03");System.out.println(al);ListIterator li = al.listIterator();System.out.println(li.hasNext());//判断后面有没有元素System.out.println(li.hasPrevious());//判断前面有没有元素//把集合里面的元素替换成另一种元素while (li.hasNext()){Object obj = li.next();if (obj.equals("02"))li.set("04");}System.out.println(li.hasNext());//判断后面有没有元素System.out.println(li.hasPrevious());//判断前面有没有元素System.out.println(al);}}

 

 

import java.util.ArrayList;import java.util.Iterator;/** * 去除ArrayList中的重复元素 * 定义一个临时容器储存 * 如果不相同存入,相同就不存 * 便利完成之后返回 */public class ArrayListTest{public static void main(String[] args){ArrayList al = new ArrayList();al.add("01");al.add("02");al.add("01");al.add("04");al.add("02");System.out.println(al+"------"+al.size());System.out.println(SingleElement(al));}//定义一个函数,返回一个ArrayList集合,参数ArrayList。功能是去除ArrayList中的重复元素.public static ArrayList SingleElement(ArrayList al){ArrayList arrayBuffer = new ArrayList();for (Iterator it = al.iterator();it.hasNext(); ){Object obj = it.next();if (!arrayBuffer.contains(obj)){arrayBuffer.add(obj);}}return arrayBuffer;}}

 


 

<span style="font-size:14px;"><strong></strong></span><pre class="java" name="code">import java.util.ArrayList;import java.util.Iterator;/** * 将自定义元素存到ArrayList结构中去,并去掉重复元素 * 比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。 *  * 思路:  *对人描述,将数据封装进人对象。  *定义容器,将人存入。  *取出。  *   List集合判断元素是否相同,依据是元素的equals方法。  */public class ArrayListTest{public static void main(String[] args){ArrayList al = new ArrayList();al.add(new Person("zhangsan",13));al.add(new Person("lisi",13));al.add(new Person("zhangsan",13));al.add(new Person("zhangsan",15));al.add(new Person("lisi",13));al.add(new Person("lisi",12));al = singleElement(al);for (Iterator it = al.iterator();it.hasNext(); ){Person p = (Person)it.next();System.out.println(p.getName()+"------"+p.getAge());}}//定义一个函数,返回ArrayList,参数ArrayList。函数功能去除ArrayList集合中的重复元素public static ArrayList singleElement(ArrayList al){ArrayList arrayBuffer = new ArrayList();for (Iterator it = al.iterator();it.hasNext(); ){if (!arrayBuffer.contains(it.next())){arrayBuffer.add(it.next());}}return arrayBuffer;}}//声明一个Person对象,具有年龄和名字的属性class Person{private String name;private int age;Person(String name,int age){this.name = name;this.age = age;} public boolean equals(Object obj)      {          if(!(obj instanceof Person))              return false;          Person p = (Person)obj;          return this.name.equals(p.name) && this.age == p.age;      }     public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

 

 

LinkedList:特有方法:

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

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

 

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

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

 

get方法获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
 
removeFirst();  移除并返回此列表的第一个元素。

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

remove方法获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException

 

 

import java.util.LinkedList;/** *  * LinkedList演示 * */public class ListDemo {public static void main(String[] args){LinkedList ll = new LinkedList();ll.add("02");ll.addFirst("01");ll.addLast("03");System.out.println(ll);System.out.println(ll.getFirst());System.out.println(ll.getLast());System.out.println(ll);System.out.println(ll.removeFirst());System.out.println(ll.removeLast());System.out.println(ll);//打印移出方式while (!ll.isEmpty()){System.out.println(ll.removeLast());}}}


 

 在JDK1.6出现了替代方法: 
 
offerFirst(); 在此列表的开头插入指定的元素。
offerLast(); 在此列表末尾插入指定的元素。
 
peekFirst();  获取但不移除此列表的第一个元素;如果此列表为空,则返回 null
peekLast(); 获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null
获取元素,但不删除元素。如果集合中没有元素,会返回null。
 
pollFirst(); 获取并移除此列表的第一个元素;如果此列表为空,则返回 null
pollLast(); 获取并移除此列表的最后一个元素;如果此列表为空,则返回 null
获取元素,但是元素被删除。如果集合中没有元素,会返回null。

 

 

堆栈和队列: 


堆栈:先进后出  如同一个杯子。

队列:先进先出 First in First out  FIFO 如同一个水管。

 

import java.util.LinkedList;/** *  * 用LinkedList模拟一个堆栈结构的 * */public class DuiZhanDemo {public static void main(String[] args){DuiZhan dz = new DuiZhan();dz.myAdd("01");dz.myAdd("02"); dz.myAdd("03");while (!dz.isNull()){System.out.println(dz.myGet());}}}//堆栈结构:先进后出class DuiZhan{private LinkedList link;DuiZhan(){link = new LinkedList();}public void myAdd(Object obj){link.addFirst(obj);}public Object myGet(){return link.removeFirst();}public boolean isNull(){return link.isEmpty();}}


 

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

 

0 0
原创粉丝点击