黑马程序员----------List三个子类的特点以及应用场景

                                ----------------------android培训java培训、期待与您交流! ----------------------
|--List 常用方法
      add(int index,Object obj),添加指定的元素到指定索引处
      get(int index),获取指定索引处的元素
      indexOf(Object obj),返回指定元素在集合中第一次出现的索引值,如果不存在,返回-1
      set(int index,Object obj)设置指定索引处的值(也就是替换),返回的是被替换掉的元素
      listIterator(),List特有的迭代器
      subList(int start,int end),截取指定区间的元素
      remove(int index)移除指定索引处的元素,返回的是被移除的元素

|--ArrayList 特殊方法几乎没有
            
|--LinkedList
      addFirst,添加指定元素到当前集合第一个位置
      addLast添加指定元素到当前集合的最后位置
      removeFirst,移除第一个元素
      removeLast,移除最后一个元素
      getFirst,获取集合第一个元素
      getLast,获取元素最后一个元素
                  下面方法JDK6以后被替代了(不用看)
                  offerFirst,offerLast,pollFirst,pollLast,peekFirst,peekLast
|--Vector
      addElement(Object obj),添加指定元素到当前集合第一个位置
      elements() 暂时不用掌握
      首先说数据结构:
      ArrayList和Vector底层都是以数组的形式实现的
      LinkedList底层是以链表的形式实现的
     几种数据结构:
     A:栈 先进后出 Stack(就像是一个只能单人通过的死胡同,第一个进去的只能最后一个出来)


     B:队列 先进先出 Queue(就像是排队买火车票,排在前边的人肯定比排在后边的人先买到票)

     C:数组 查询效率高.增删慢(就像是基本的数组一样,每个元素都有自己的下标,查询只需要按照下标寻找即可)
这个就不再弄图啦
     D:链表 查询效率低.增删快(就像是去某个地方倒公交车一样,你到达不了下一站就没办法到达下一站能去到的地方)

      特点
      A:ArrayList
            底层数据结构是数组,查询快,增删慢。
            线程不安全,效率高。
            轻量级(版本高)
        B:Vector
            底层数据结构是数组,查询快,增删慢。
            线程安全,效率低。
            
重量级(版本低)      
       CinkedList
            底层数据结构是链表,查询慢,增删快。
            线程不安全,效率高。

      那么,究竟用谁呢?
      看需求:
      是否要安全:
            是:Vector
            否:ArrayList或者LinkedList   
                查询多:ArrayList
                就像上课用的课表,可以每个人都标上各自标号,因为平时一个班的人不会经常添加或走
                增删多:LinkedList
        如果你什么都不懂,那么就用ArrayList。
      还有几个经典的面试题:
      选择题:如果在实际开发中让你自己做一个栈,你会通过哪种方式实现?
      A.java.util.Stack(javaAPI中提供的栈)
      B.数组
      CinkedList
      答案是: C
      我们可以用java提供给我们的现成的栈去当我们自己的类的属性,这样就可以屏蔽掉那些自己不想用的方法,而只用对自己有用的方法,在外界是看不到我们具体方法的实现的.代码如下:
import java.util.Stack;
public  MyStack{
    //成员变量
    private Stack st;
   //构造方法
    public MyStack(){
        Stack st = new Stack();
} //将java提供给我们的Stack作为我的属性,这样就可以用对我们有用的方法   
    public Object pop(){//
移除堆栈顶部的对象,并作为此函数的值返回该对象。
        return st.pop;
    }
    public Object push(
Object o){// 把项压入堆栈顶部。
        st.push(Object o);
    }
}
      原因是: A
它继承了Vector,就是继承了它的数组实现形式,这并不是重要的,关键是他也继承了Vector的所有不是私有的方法,这些方法中有好多是不适用与栈的,比如可以随意的插入元素,那么就违反了栈的原则
                  B:自己数组实现太麻烦,而且开发中不可能用数组自己实现
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值