※ 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;
}
}