集合 List篇

※ List接口

主要特征是其元素以线性方式存储,集合中允许存放重复对象。主要实现类包括:

· ArrayList: 代表长度可变的数组。允许对元素进行快速的随机访问,但是向ArrayList中插入与删除元素的速度较慢。底层是数组,线程不安全,效率高比vector,LinkedList。
. LinkedList: 在实现中采用链表结构。对顺序访问进行了优化,底层是链表,向List中插入和删除元素的速度较快,随机访问速度则相对较慢。
· Vector: 底层是数组,是线程安全的集合。

遍历方式:
    a. list.get(i);    //通过索引检索对象;
    b. Iterator it = list.iterator();
          it.next();

※ ArrayList类

※ ArrayList构造器:
构造器
※ 方法:
这里写图片描述
这里写图片描述
※ 方法的验证:

package com.briup.collection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ArrayListTest {
    public static void main(String[] args) {
        //ArrayList底层是基于数组实现的
        //并且线程不安全
        //ArrayList有序可重复
        //List<Book> list=new ArrayList<>();
        List<Book> list=new ArrayList<>();
        list.add(new Book(1, "lisi", 33));
        list.add(new Book(2, "lisi1", 33));
        Book bs1=new Book(3, "lisi2", 33);
//      List<Book> lis1=new ArrayList<>();
//      lis1.add(new Book(4, "java", 44));
//      lis1.add(new Book(5, "mysql", 24));
        Book bs2=bs1;
        list.add(bs1);
        list.add(bs2);
        list.add(bs2);
        //合并两个集合,把参数中的集合元素复制到单前
        //集合的末尾
        //list.addAll(lis1);
        //把集合元素插入到单前集合指定的位置,
        //原有位置数据后移
        //list.addAll(1,lis1);
        //查看集合中是否包含某个元素
        //System.out.println(list.contains(bs1));
        //把元素插入到集合中指定的位置
        //list.add(1, new Book(4, "java", 43.55));
        //增加容器(数组)的长度,
        //一般不用,因为Arraylist集合会自动增加
        //((ArrayList<Book>) list).ensureCapacity(30); 
        //从集合中取下表为2的元素
        //Book b=list.get(2);
        //System.out.println("book:"+b);
        //查询元素在集合中的位置,有返回index值,没有-1
        //System.out.println(list.indexOf(bs1));
        //System.out.println(list.indexOf(new Book(6, "test", 44)));
        //查找最后一个元素所出的位置
        //System.out.println(list.lastIndexOf(bs1));
        //基于角标对元素进行移除
        //list.remove(1);
        //基于角标替换某个值
        //list.set(0, new Book(5, "xml", 33));
        //将容器的长度等价于使用的长度
        ((ArrayList<Book>) list).trimToSize();
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
        Iterator<Book> iter=list.iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
    }
}

※ 注:Arrays.asList方法。
作用:将一个数组装换成集合形式(java.util.Arrays)

public static void main(String[] args){
List<String> list=new ArrayList<>();
String s="wwweeerertwqe";
//s.splist(参数);用于分割数组,参数代表以什么方式分割
String [] s1=s.splist("");
list=Arrays.aslist(s1);
System.out.println(list.toString());

//Exception in thread "main" 
//java.lang.UnsupportedOperationException
//at java.util.AbstractList.remove(AbstractList.java:161)
//at eseday13.ese1.A.main(A.java:14)
//错误

lost.remove(1);
System.out.println(lost.toString();
   }
}

通过把数组数据直接传给集合方式

List<String> list=new ArrayList<>();
    String s="wwqweqdasdafdsfdsferer";
    String[] s1=s.split("");
    System.out.println(Arrays.toString(s1));
    System.out.println(s1.length);
    //通过for循环将数据传给集合
    for(int i=0;i<s1.length;i++) {
        if (list.contains(s1[i])){
            continue;
        }else {
            list.add(s1[i]);
        }
    }
    System.out.println(list.toString());

※ 两种方式都是把数组转换成了集合,区别在于:
所以,用Arrays.asList()方法装换成集合后不能用部分集合的方法(增,删,改,查等。可能编写jdk的人认为数组是长度是不可变了原因)。

※ LinkedList类

※ LinkedList构造器:

※ 方法:
这里写图片描述
这里写图片描述
这里写图片描述
※ 方法的验证:

package com.briup.collection;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

public class LinkedListTest {
    //LinkedList 底层维护的是节点,
    public static void main(String[] args) {
        LinkedList<Integer> list=new LinkedList<>();
        list.add(12);
        list.add(111);
        list.add(1);
        list.add(22);
        list.add(1);
        list.add(9);
        list.add(11);
        //移除最后一次出现的值
//      list.removeLastOccurrence(1);
        //移除第一次出现的值
//      list.removeFirstOccurrence(1);
        //往集合的顶部添加一个元素
//      list.push(88);
        //移除第一个元素,返回移除的元素
//      System.out.println("pop:"+list.pop());
        //移除最后一个元素,返回移除的元素
//      System.out.println("rem:"+list.pollLast());
        //移除第一个元素,返回移除的元素
//      System.out.println("rem:"+list.pollFirst());
        //移除第一个元素,返回移除的元素
//      System.out.println("rem:"+list.poll());
        //获取最后一个元素
        //System.out.println("tail:"+list.peekLast());
        //获取第一个元素
        //System.out.println("head:"+list.peekFirst());
        //将元素插入到尾部
        //list.offerLast(33);
        //插入元素到开头部分
//      list.offerFirst(33);
        //将元素插入到尾部
//      list.offer(33);
//      ListIterator<Integer> iter=list.listIterator(3);
//      while(iter.hasPrevious()){
//          System.out.println(iter.previousIndex()+"--"+iter.previous());
//      }
//      System.out.println(list.indexOf(1)+"--"+list.lastIndexOf(1));
//      System.out.println(list.getFirst()+"--"+list.getLast());
        //获取第一个元素
//      System.out.println("head:"+list.element());
        for(Integer  nn:list){
            System.out.println(nn);
        }
//      Iterator<Integer> iter=list.iterator();
//      while(iter.hasNext()){
//          System.out.println(iter.next());
//      }
        //在集合的头部插入元素
//      list.addFirst(1);
        //在集合的尾部插入一个元素
//      list.addLast(1);
//      Iterator<Integer> iter=list.iterator();
//      while(iter.hasNext()){
//          System.out.println(iter.next());
//      }
        //获取集合中的第一个元素
//      System.out.println("head:"+list.element());
        //获取指定位置的元素
        /*System.out.println("第二个元素:"+list.get(1));
        //获取第一个元素
        System.out.println("head:"+list.getFirst());
        //获取最后一个元素
        System.out.println("tail:"+list.getLast());
        //从集合的后面倒着遍历
        Iterator<Integer> iter=list.descendingIterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }*/
    }

}

※ Vector类

※ Vecto构造器:
这里写图片描述
※ 方法:
这里写图片描述
这里写图片描述
这里写图片描述
※ 方法的验证:

package com.briup.collection;

import java.util.Arrays;
import java.util.Enumeration;
import java.util.Vector;

/*
 * vector线程安全的集合,容量每次翻倍
 *  Arraylist线程不安全的的集合
 * 
 */
public class VectorTest {
    public static void main(String[] args) {
        Vector<String> vc=new Vector<>();
        vc.add("test");
        vc.add("test1");
        vc.add("test2");
        vc.add("test3");
        vc.add("test4");
        System.out.println("before:"+vc.capacity()+"--"+vc.size());
        vc.trimToSize();
        System.out.println("after:"+vc.capacity()+"--"+vc.size());
//      System.out.println(vc);
//      System.out.println(vc.toString());
//      vc.removeAllElements();
//      System.out.println(vc.size());
//      vc.add(2, "test5");
        //将第一个参数表示的元素插入到集合第二个参数指定的位置
//      vc.insertElementAt("test5", 2);
        //从第二参数指定的位置开始查找某个元素
//      System.out.println(vc.indexOf("test2", 2));
    /*  //将结合中的元素转化为枚举
        Enumeration<String> en=vc.elements();
        //判断此枚举中是否还有元素
        while(en.hasMoreElements()){
            //取出枚举中的元素
            System.out.println(en.nextElement());
        }*/
//      System.out.println("********");
        //等价于get方法,基于角标获取元素
//      String m=vc.elementAt(3);
//      System.out.println("y:"+m);
        //将集合中的元素拷贝到数组中
//      String[] s=new String[vc.size()];
//      vc.copyInto(s);
//      System.out.println(Arrays.toString(s));
        //获取单前的容量是多少
//      System.out.println(vc.capacity());
        //添加一个元素到末尾
        //vc.addElement("briup");
        for(String nn:vc){
            System.out.println(nn);
        }
    }
}

注:公用自定义对象类:

package com.briup.collection;

public class Book {
    private long id;
    private String name;
    private double price;
    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return (int) id;
    }
    @Override
    public boolean equals(Object obj) {
        if(obj==null){
            return false;
        }else if(!(obj instanceof Book)){
            return false;
        }
        Book b=(Book) obj;
        System.out.println(this.price+"---"+b.price);
        if(this.id==b.id&&this.name.equals(b.name)){
            return true;
        }
        return false;
    }
    @Override
    public String toString() {
        return "Book [id=" + id + ", name=" + name + ", price=" + price + "]";
    }
    public Book(long id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }
    public Book() {
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }

}

猜你喜欢

转载自blog.csdn.net/qq_42857603/article/details/81865698