chart11 持有对象

来源:互联网 发布:线切割如何编程软件 编辑:程序博客网 时间:2024/06/06 06:55

11.3  添加对象 实例:AsListInference.java,

//: holding/AsListInference.java  // Arrays.asList() makes its best guess about type.  import java.util.*;  class Snow {}  class Powder extends Snow {}  class Light extends Powder {}  class Heavy extends Powder {}  class Crusty extends Snow {}  class Slush extends Snow {}  public class AsListInference {      public static void main(String[] args) {          List<Snow> snow1 = Arrays.asList(              new Crusty(), new Slush(), new Powder());          // Won't compile:          // List<Snow> snow2 = Arrays.asList(              // new Light(), new Heavy());          // Compiler says:          // found : java.util.List<Powder>          // required: java.util.List<Snow>          // Collections.addAll() doesn't get confused:          List<Snow> snow3 = new ArrayList<Snow>();          Collections.addAll(snow3, new Light(), new Heavy());          // Give a hint using an          // explicit type argument specification:          List<Snow> snow4 = Arrays.<Snow>asList(              new Light(), new Heavy());      }  } ///:~

  1. 解决办法:使用显式类型参数说明(List<Snow> snow4 = Arrays.<Snow>asList(new Light(), new Heavy());) ,象上面的例子中最后所做的那样。
  2. Collections.addAll()。
    public static <T> boolean addAll(Collection<? super T> c, T... elements)该方法接受一个Collection对象,以及一个数组或是一个用逗号分割的列表,将元素添加到Collection中。先构建一个不包含元素的Collection,然后调用Collections.addAll()这种方式很方便,因此是首选方式
  3. Collection导出类构造器,可以接受另一个Collection,用它来将自身初始化。
  4. Collection的addAll()方法,将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。相比使用构造函数初始化,这种方法快的多

11.5 当确定一个元素是否属于List(不知这里是否可以换为容器),发现某个元素的索引,以及从某个List中移除一个元素时,都会用到equal()​方法

11.6 迭代器

           Iterater的四个作用

          在调用remove()之前,必须先调用next()

        “接受对象容器,并传递他,从而在每个对象上都执行操作,这种思想十分强大,并且贯穿于本书”

      

//: holding/CrossContainerIteration.javaimport typeinfo.pets.*;import java.util.*;public class CrossContainerIteration {  public static void display(Iterator<Pet> it) {    while(it.hasNext()) {      Pet p = it.next();      System.out.print(p.id() + ":" + p + " ");    }    System.out.println();  }  public static void main(String[] args) {    ArrayList<Pet> pets = Pets.arrayList(8);    LinkedList<Pet> petsLL = new LinkedList<Pet>(pets);    HashSet<Pet> petsHS = new HashSet<Pet>(pets);    TreeSet<Pet> petsTS = new TreeSet<Pet>(pets);    display(pets.iterator());    display(petsLL.iterator());    display(petsHS.iterator());    display(petsTS.iterator());  }} /* Output:0:Rat 1:Manx 2:Cymric 3:Mutt 4:Pug 5:Cymric 6:Pug 7:Manx0:Rat 1:Manx 2:Cymric 3:Mutt 4:Pug 5:Cymric 6:Pug 7:Manx4:Pug 6:Pug 3:Mutt 1:Manx 5:Cymric 7:Manx 2:Cymric 0:Rat5:Cymric 2:Cymric 7:Manx 1:Manx 3:Mutt 6:Pug 4:Pug 0:Rat*///:~

       Iterater,能够将遍历序列的操作与序列的底层的结构分离,迭代器统一对容器的访问形式​

       listIterater只适用于list类型的访问,不过它能够实现双向的移动

//: holding/ListIteration.javaimport typeinfo.pets.*;import java.util.*;public class ListIteration {  public static void main(String[] args) {    List<Pet> pets = Pets.arrayList(8);    ListIterator<Pet> it = pets.listIterator();    while(it.hasNext())      System.out.print(it.next() + ", " + it.nextIndex() +        ", " + it.previousIndex() + "; ");    System.out.println();    // Backwards:    while(it.hasPrevious())      System.out.print(it.previous().id() + " ");    System.out.println();    System.out.println(pets);    it = pets.listIterator(3);    while(it.hasNext()) {      it.next();      it.set(Pets.randomPet());    }    System.out.println(pets);  }} /* Output:Rat, 1, 0; Manx, 2, 1; Cymric, 3, 2; Mutt, 4, 3; Pug, 5, 4; Cymric, 6, 5; Pug, 7, 6; Manx, 8, 7;7 6 5 4 3 2 1 0[Rat, Manx, Cymric, Mutt, Pug, Cymric, Pug, Manx][Rat, Manx, Cymric, Cymric, Rat, EgyptianMau, Hamster, EgyptianMau]*///:~


11.10 Map可以返回它的键的Set,它的值得Collection,或者他的键值对的Set

linklist 实现了list接口和Queue接口​

11.3 迭代器与Foreach 

       foreach语法可以用于数组和任何的collection容器,一个类如果想用foreach来遍历这个类的对象,那么这个类必须实现Iterater接口,(Demo)

//: holding/IterableClass.java// Anything Iterable works with foreach.import java.util.*;public class IterableClass implements Iterable<String> {  protected String[] words = ("And that is how " +    "we know the Earth to be banana-shaped.").split(" ");  public Iterator<String> iterator() {    return new Iterator<String>() {      private int index = 0;      public boolean hasNext() {        return index < words.length;      }      public String next() { return words[index++]; }      public void remove() { // Not implemented        throw new UnsupportedOperationException();      }    };  }  public static void main(String[] args) {    for(String s : new IterableClass())      System.out.print(s + " ");  }} /* Output:And that is how we know the Earth to be banana-shaped.*///:~


11.13.1 适配器方法惯用法  

ModifyingArraysASList.java重要​

//: holding/ModifyingArraysAsList.javaimport java.util.*;public class ModifyingArraysAsList {  public static void main(String[] args) {    Random rand = new Random(47);    Integer[] ia = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };    List<Integer> list1 =      new ArrayList<Integer>(Arrays.asList(ia));    System.out.println("Before shuffling: " + list1);    Collections.shuffle(list1, rand);    System.out.println("After shuffling: " + list1);    System.out.println("array: " + Arrays.toString(ia));    List<Integer> list2 = Arrays.asList(ia);    System.out.println("Before shuffling: " + list2);    Collections.shuffle(list2, rand);    System.out.println("After shuffling: " + list2);    System.out.println("array: " + Arrays.toString(ia));  }} /* Output:Before shuffling: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]After shuffling: [4, 6, 3, 1, 8, 7, 2, 5, 10, 9]array: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]Before shuffling: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]After shuffling: [9, 1, 6, 3, 7, 2, 5, 10, 4, 8]array: [9, 1, 6, 3, 7, 2, 5, 10, 4, 8]*///:~


11.14  总结


​    ​


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 滴滴车主注册没有自己的车型怎么办 代办用虚假地址注册的公司怎么办? 写字楼注册公司租户不租了怎么办 租户没把公司迁出我该怎么办 租户不肯把户口迁出了业主怎么办 同片区个体户营业场所搬迁怎么办 个体领发票的本丢了怎么办 领房产证发票和合同丢了怎么办 税务登记证5年没有办怎么办 二证合一后税务登记证怎么办? 微信漂流瓶打招呼对方收不到怎么办 添加不上徽信好友的微信帐号怎么办 手机号码不用了微信密码忘了怎么办 别人用我的手机号码注册微信怎么办 电脑此网站的安全证书有问题怎么办 起诉离婚开庭时被告不到场怎么办 商标35类被别人注册了怎么办 商标被注销后被别人注册怎么办 电商35类商标被抢注怎么办 血小板太低怎么办可以吃水果吗? 微信好友删除了只记得昵称怎么办 优酷会员1080p很卡怎么办 电脑最下面的任务栏不显示怎么办 ea账号保留的问题忘了怎么办 微博超级话题账号被屏蔽怎么办 梦幻西游手机将军令号码换了怎么办 文档的内容被锁定无法修改怎么办 用户没有权限访问u盘时该怎么办? 电脑找不到ip地址连不上网怎么办 商标提前被别人注册微博昵称怎么办 扫码注册显示手机号被占用怎么办 vivo手机屏锁密码忘了怎么办 手机号注册微博手机号不用了怎么办 微博更换手机号被别人注册过怎么办 怎么有个qq注册验证码怎么办 12306手机丢了密码忘了怎么办 教师考试注册时邮箱填写错误怎么办 计算机二级注册时邮箱填错了怎么办 注册时执业范围填错了怎么办 百度号被盗了申诉不回来怎么办 斗鱼直播伴侣显示分类不可用怎么办