11.5List

11.5List
List承诺可以将元素维护在特定的序列中。List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和移除元素。
有两种类型的List:
ArrayList:擅长随机访问元素,但,在List中间删除和添加元素时较慢。
LinkedList:在List中间进行删除和插入的操作上性能较好,提供了优化的顺序访问。LinkedList在随机访问方面较慢,但是它的特性集教ArrayList更大。
typeinfo.pets:这个类库包含了Pet类的继承层次结构,以及用于随机生成Pet对象的一些工具类。有两个特点:1有一个Pet类,以及Pet类的各种子类。2.静态的Pets.arrayList()返回一个填充了随机选取的Pet对象的ArrayList
package cn.wangs.c11.$11_5;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import typeinfo.pets.Cymric;
import typeinfo.pets.Hamster;
import typeinfo.pets.Mouse;
import typeinfo.pets.Pet;
import typeinfo.pets.Pets;

public class ListFeatures {

public static void main(String[] args) {
    Random random = new Random(47);
    List<Pet> pets = Pets.arrayList(7);
    System.out.println("1:" + pets);

    Hamster h = new Hamster();
    pets.add(h);
    System.out.println("2:" + pets);
    System.out.println("3:" + pets.contains(h));

    pets.remove(h);
    Pet pet = pets.get(2);
    System.out.println("4:" + pet + " " + pets.indexOf(pet));

    Pet cymric = new Cymric();
    System.out.println("5:" + pets.indexOf(cymric));

    System.out.println(pets.remove(cymric));

    // System.out.println("7:"+pets.remove(p));p cannot be resolved to a
    // variable

    System.out.println("8:" + pets);

    pets.add(3, new Mouse());
    System.out.println("9:" + pets);

    List<Pet> sub = pets.subList(1, 4);
    System.out.println("10:" + sub);

    Collections.sort(sub);

    System.out.println("sorted subList:" + sub);

    System.out.println("11:" + pets.containsAll(sub));

    Collections.shuffle(sub, random);
    System.out.println("shuffle sub:" + sub);

    System.out.println("12:" + pets.containsAll(sub));

    List<Pet> copy = new ArrayList<Pet>(pets);

    System.out.println(copy);

    sub = Arrays.asList(pets.get(1), pets.get(4));
    System.out.println("sub:" + sub);

    copy.retainAll(sub);// 只保留指定的集合
    System.out.println("13:" + copy);

    copy = new ArrayList<Pet>(pets);
    System.out.println("copy:" + copy);

    copy.remove(2);
    System.out.println("14:" + copy);

    copy.removeAll(sub);
    System.out.println("15:" + copy);

    copy.set(1, new Mouse());
    System.out.println("16:" + copy);

    copy.addAll(2, sub);
    System.out.println("17:" + copy);
    copy.set(2, new Mouse());
    copy.addAll(2, sub);
    System.out.println("17:" + copy);

    System.out.println("18:" + pets.isEmpty());

    pets.clear();
    System.out.println("19:" + pets);

    System.out.println("20:" + pets.isEmpty());

    pets.addAll(Pets.arrayList(4));
    System.out.println("21:" + pets);

    Object[] o = pets.toArray();
    System.out.println("22:" + o[3]);

    Pet[] pa = pets.toArray(new Pet[0]);
    System.out.println("23:"+pa[3].id());

}

}
1:[Rat, Manx, Cymric, Mutt, Pug, Cymric, Pug]
2:[Rat, Manx, Cymric, Mutt, Pug, Cymric, Pug, Hamster]
3:true
4:Cymric 2
5:-1
false
8:[Rat, Manx, Cymric, Mutt, Pug, Cymric, Pug]
9:[Rat, Manx, Cymric, Mouse, Mutt, Pug, Cymric, Pug]
10:[Manx, Cymric, Mouse]
sorted subList:[Cymric, Manx, Mouse]
11:true
shuffle sub:[Manx, Cymric, Mouse]
12:true
[Rat, Manx, Cymric, Mouse, Mutt, Pug, Cymric, Pug]
sub:[Manx, Mutt]
13:[Manx, Mutt]
copy:[Rat, Manx, Cymric, Mouse, Mutt, Pug, Cymric, Pug]
14:[Rat, Manx, Mouse, Mutt, Pug, Cymric, Pug]
15:[Rat, Mouse, Pug, Cymric, Pug]
16:[Rat, Mouse, Pug, Cymric, Pug]
17:[Rat, Mouse, Manx, Mutt, Pug, Cymric, Pug]
17:[Rat, Mouse, Manx, Mutt, Mouse, Mutt, Pug, Cymric, Pug]
18:false
19:[]
20:true
21:[Manx, Cymric, Rat, EgyptianMau]
22:EgyptianMau
23:15
List价值在于:可修改的序列,添加元素,不知道下标,默认追加到末尾。
contains()确定某个对象是否在列表中。
remove()移除一个对象;indexOf()查该对象在list中所处的位置。这三个方法都会用到equals()函数(它是Object镀锡的一部分)。

LinkedList的插入删除操作是廉价的。ArrayList的随机访问是廉价的,但其插入和删除时昂贵的。
subList():截取集合的一段元素,返回新的子集。
无论Collection.sort()还是Collection.shuffle()都属于被截取的那个集合的子集。
retainAll():用来取两个集合的“交集”部分。返回一个新的集合。
removeAll():也是基于equals()的。
clear():清空集合元素
isEmpty():判断集合是否为空
toArray():可以将集合转为数组
练习5:修改ListFeatures.java 让它使用Integer,而不是Pet,并解释在结果上有何不同
package cn.wangs.c11.$11_5;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Ex5 {
public static List listofRandInteger(int length, int n) {
Random rand = new Random();
List li = new ArrayList();
for (int i = 0; i < length; i++)
li.add(rand.nextInt(n));
return li;
}

public static void main(String[] args) {
    Random rand = new Random();
    List<Integer> li = listofRandInteger(7, 10);
    System.out.println("1: " + li);
    Integer h = new Integer(rand.nextInt(10));
    li.add(h);
    System.out.println("2: " + li);
    System.out.println("3: " + li.contains(h));
    // removes the first instance equivalent to Integer h:
    li.remove(h);
    System.out.println("3.5 " + li);
    Integer p = li.get(2);
    System.out.println("4: " + p + " " + li.indexOf(p));
    Integer cy = new Integer(rand.nextInt(10));
    System.out.println("5: " + cy + " " + li.indexOf(cy));
    System.out.println("6: " + li.remove(cy));
    System.out.println("7: " + li.remove(p));
    System.out.println("8: " + li);
    li.add(3, new Integer(rand.nextInt(10)));
    System.out.println("9: " + li);
    List<Integer> sub = li.subList(1, 4);
    System.out.println("sublist: " + sub);
    System.out.println("10: " + li.containsAll(sub));
    Collections.sort(sub);
    System.out.println("sorted sublist: " + sub);
    System.out.println("11: " + li.containsAll(sub));
    System.out.println("11.25: " + li);

    Collections.shuffle(sub, rand);
    System.out.println("11.5: " + li);
    System.out.println("shuffled sublist: " + sub);
    System.out.println("12: " + li.containsAll(sub));
    List<Integer> copy = new ArrayList<Integer>(li);
    System.out.println("12.5 " + li);
    sub = Arrays.asList(li.get(1), li.get(4));
    System.out.println("sub: " + sub);
    copy.retainAll(sub);
    System.out.println("13: " + copy);
    copy = new ArrayList<Integer>(li);
    copy.remove(2);
    System.out.println("14: " + copy);
    copy.removeAll(sub);
    System.out.println("15: " + copy);
    if (copy.size() > 1)
        copy.set(1, 8);
    System.out.println("16: " + copy);
    if (copy.size() > 2)
        copy.addAll(2, sub);
    System.out.println("17: " + copy);
    System.out.println("18: " + li.isEmpty());
    li.clear();
    System.out.println("19: " + li);
    System.out.println("20: " + li.isEmpty());
    li.addAll(listofRandInteger(4, 10));
    System.out.println("21: " + li);
    Object[] o = li.toArray();
    System.out.println("22: " + o[3]);
    Integer[] ia = li.toArray(new Integer[0]);
    System.out.println("23: " + ia[3]);

}

}
练习6,7
package cn.wangs.c11.$11_5;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

public class Ex6 {
public static void main(String[] args) {
Random random = new Random(47);
List strs = new ArrayList(Arrays.asList(“aa”, “bb”, “cc”));
System.out.println(“1:” + strs);

    System.out.println("2:" + strs.get(1));

    strs.add(2, "dd");
    System.out.println("3:" + strs);

    List<String> sub = strs.subList(1, 2);
    System.out.println("4:" + sub);

    System.out.println(strs.containsAll(sub));
    sub.contains("bb");

    // strs.removeAll(sub);
    strs.retainAll(sub);
    System.out.println(strs);

}

}
1:[aa, bb, cc]
2:bb
3:[aa, bb, dd, cc]
4:[bb]
true
[bb]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值