List子类 ArrayList Vector 和 LinkedList

List子类 ArrayList Vector 和 LinkedList

 List集合的子类遍历集合中的元素可以使用的任何迭代遍历方式

面试题:
List子类的特点?

    ArrayList
        底层数据结构是数组,查询快,增删慢,线程不安全,不同步,效率高
    vector
        底层数据结构是数组,查询快,增删慢,线程安全,同步,效率低

    LinkedList
        底层数据结构数链表,查询慢,增删快,线程不安全,不同步,效率高


       应用场景:ArrayList:开发中用的非常多!如果给一个需求,不知道使用谁的时候,都使用ArrayList

ArrayList

需求:
ArrayList去除集合中字符串的重复值(字符串的内容相同)(创建新集合)

代码:
public static void main(String[] args) {
ArrayList al= new ArrayList();

    al.add("hello") ;
    al.add("world") ;
    al.add("world") ;
    al.add("java") ;
    al.add("javaee") ;
    al.add("javaweb") ;
    al.add("javaee") ;
    al.add("javaee") ;

    ArrayList nal = new ArrayList();

    Iterator i = al.iterator();

    while(i.hasNext()){
        String s = (String)i.next();
        if(nal.contains(s)){
            nal.add(s);
        }
    }
    Iterator i2 = nal.iterator();
    while (i2.hasNext()){
        String s = (String)i2.next();
        System.out.println(s);
    }
}

结果:
hello
world
java
javaee
javaweb

需求:
ArrayList去除集合中字符串的重复值(字符串的内容相同)附件条件:不允许新建集合去完成!

代码:

 public static void main(String[] args) {
    ArrayList  al= new ArrayList();

    al.add("hello") ;
    al.add("world") ;
    al.add("world") ;
    al.add("java") ;
    al.add("javaee") ;
    al.add("javaweb") ;
    al.add("javaee") ;
    al.add("javaee") ;

    for(int x =0 ;x<al.size()-1;x++){
        for(int y = 1+x;y<al.size();y++){
            if(al.get(x).equals(al.get(y))){
                al.remove(y);
                y--;
            }
        }
    }
    Iterator i = al.iterator();

    while(i.hasNext()){
        String s = (String)i.next();
        System.out.println(s);
    }

}

结果:

hello
world
java
javaee
javaweb

Vector

Vecotr的特有功能:

添加功能:
    public void addElement(Object obj) :给Vector集合中添加元素
    public Object elementAt(int index)      ------>get(int index):获取指定索引处的元素

    public Enumeration elements()       ---->Iterator iterator()
    boolean hasMoreElements()       ---->hasNext():判断是否有下一个可以迭代的元素
    Object nextElement()            ----->next()

代码:

public static void main(String[] args) {
Vector v = new Vector();

    v.addElement("Hello");
    v.addElement("World");
    v.addElement("Java");

    for(int x = 0;x<v.size();x++){
        String s = (String)v.elementAt(x);
        System.out.println(s);
    }
    System.out.println("*********");

    Enumeration e = v.elements();

    while(e.hasMoreElements()){
        String s = (String)e.nextElement();
        System.out.println(s);
    }
}

结果:

Hello
World
Java


Hello
World
Java

LinkedList

特有功能:
和添加相关的方法:
public void addFirst(Object e)
public void addLast(Object e)
和获取相关的方法:
public Object getFirst()返回此列表的第一个元素。
public Object getLast():返回此列表的最后一个元素
和删除相关的方法:
public Object removeFirst():删除此列表的第一个元素
public Object removeLast():删除此列表的最后一个元素

代码:

public static void main(String[] args) {
    LinkedList ll = new LinkedList();

    ll.add("Hello");
    ll.add("World");
    ll.add("Java");

    /*和添加相关的方法:
    public void addFirst(Object e)
    public void addLast(Object e)*/

    ll.addFirst("你好");
    ll.addLast("我爱你");
    System.out.println(ll);
    System.out.println("*******************");


    /*和获取相关的方法:
    public Object getFirst()返回此列表的第一个元素。 
    public Object getLast():返回此列表的最后一个元素*/
    System.out.println(ll.getFirst());
    System.out.println(ll.getLast());
    System.out.println("********************");

    /* 和删除相关的方法:
    public Object removeFirst():删除此列表的第一个元素
    public Object removeLast():删除此列表的最后一个元素*/
    ll.removeFirst();
    ll.removeLast();
    System.out.println(ll);

}

结果

[你好, Hello, World, Java, 我爱你]


你好
我爱你


[Hello, World, Java]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArrayListVectorLinkedList是Java中常用的集合类,它们都实现了List接口,但在实现细节上有一些区别。 1. 线程安全性: - ArrayListLinkedList是非线程安全的,不适合在多线程环境中使用。 - Vector是线程安全的,它通过使用synchronized关键字来保证线程安全性。但是这也导致了在并发情况下性能较差。 2. 底层实现: - ArrayListVector底层都使用数组实现,支持随机访问元素,根据索引获取元素的时间复杂度为O(1)。 - LinkedList底层使用双向链表实现,不支持随机访问元素,根据索引获取元素的时间复杂度为O(n),但在插入和删除元素时具有较好的性能,时间复杂度为O(1)。 3. 动态扩容: - ArrayListVector在需要扩容时会自动增加容量。ArrayList默认扩容为原来容量的1.5倍,Vector默认扩容为原来容量的2倍。 - LinkedList没有固定的容量限制,可以动态增加节点。 4. 迭代器: - ArrayListVector通过Iterator迭代器进行遍历。 - LinkedList除了支持Iterator迭代器外,还可以通过getFirst()、getLast()、next()等方法进行遍历。 5. 性能比较: - ArrayList在读取元素和修改元素时性能较好,适合随机访问。 - LinkedList在插入和删除元素时性能较好,适合频繁的插入和删除操作。 综上所述,选择使用ArrayList还是Vector还是LinkedList,取决于具体的使用场景和需求。如果需要线程安全性,可以选择Vector;如果需要频繁的插入和删除操作,可以选择LinkedList;如果需要随机访问元素,可以选择ArrayList

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值