JAVASE-18:集合之ArrayList、Vector、LinkedList

Java集合中List接口的实现类主要有ArrayList、Vector、LinkedList

ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高
Vector:底层数据结构是数组,查询快,增删慢 线程安全 效率低
LinkedList:底层数据结构是链表,查询慢,增删快 线程不安全 效率高

1.ArrayList的特有功能

JDK1.8新增的一个方法也能遍历集合
void forEach(Consumer<? super E> action) 执行特定动作的每一个元素的 Iterable直到所有元素都被处理或操作抛出异常

public static void main(String[] args) {
    ArrayList list = new ArrayList();
    list.add(20);
    list.add(120);
    list.add(200);
    /*  void forEach (Consumer < ? super E > action)
    执行特定动作的每一个元素的 Iterable直到所有元素都被处理或操作抛出异常。*/
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }
    System.out.println("==========================");
    
    list.forEach(new Consumer() {
        @Override
        public void accept(Object o) {
            System.out.println(o);
        }
    });
}

2.Vector的特有功能

Vector 类可以实现可增长的对象数组 , Vector 是同步的。

Vector类特有功能:

void addElement (E obj)
添加指定的组件到这个向量的结束,增加其大小由一个。

E elementAt(int index) 
返回指定索引处的组件。

Enumeration<E> elements()
返回此向量的组件的枚举。

E firstElement()
返回第一个组件(在指数 0项目)这个载体。

E lastElement()
返回向量的最后一个组件。

boolean removeElement(Object obj)
从该向量中移除第一个(最低索引)发生的参数。

void removeElementAt(int index)
在指定的索引中删除组件。

void setElementAt(E obj, int index)
设置组件在指定的 index这个向量是指定的对象。

3.LinkedList的特有功能

List 接口的链接列表实现 , 此实现不是同步的

void addFirst(E e)
在此列表的开始处插入指定的元素。
void addLast(E e)
将指定的元素列表的结束。
*
E getLast()
返回此列表中的最后一个元素。
E peek()
检索,但不删除,此列表的头(第一个元素)。
E peekFirst()
检索,但不删除该列表的第一个元素,或返回 null如果这个列表是空的。
E peekLast()
检索,但不删除该列表的最后一个元素,或返回 null如果这个列表是空的。
*
E poll()
检索并删除此列表的头(第一个元素)。
E pollFirst()
检索并移除此列表的第一个元素,或返回 null如果这个列表是空的。
E pollLast()
检索并移除此列表的最后一个元素,或返回 null如果这个列表是空的。
*
E pop()
从这个列表所表示的堆栈中弹出一个元素。

void push(E e)
将一个元素推到由该列表所表示的堆栈上。
E removeLast()
移除并返回此列表中的最后一个元素。
*
E removeFirst()
移除并返回此列表中的第一个元素。
例1:用LinkedList模拟栈数据结构的集合并测试
public static void main(String[] args) {
        //栈的特点:先进的后出,后进的先出。
        MyList myList = new MyList();
        myList.add(100);
        myList.add(200);
        myList.add(300);
        Object obj= myList.get();
        System.out.println(obj);
        obj = myList.get();
        System.out.println(obj);
        obj = myList.get();
        System.out.println(obj);

        obj = myList.get();
        System.out.println(obj);
        obj = myList.get();
        System.out.println(obj);
        obj = myList.get();
        System.out.println(obj);
    }
public class MyList {
    private  LinkedList linkedList;
    public MyList() {
        //创建Lin
        linkedList = new LinkedList();
    }

    public void add(Object obj) {
        linkedList.addFirst(obj);
    }

    public Object get() {
        Object first = linkedList.pop();
        linkedList.addLast(first);
        return first;
    }
}
例2:去除ArrayList中重复字符串元素方式

思路1:选择排序

public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(20);
        list.add(20);
        list.add(120);
        list.add(320);
        list.add(320);
        list.add(20);
        list.add(230);
        list.add(204);
        list.add(203);
        list.add(20);
        list.add(120);
        list.add(320);
        list.add(120);
        list.add(20);
        list.add(204);
        list.add(203);
        //选择排序:拿一个元素跟后面的每一个元素去比较,遇到相同的删掉。
        for (int i = 0; i < list.size()-1; i++) {
            for(int j=i+1;j<list.size();j++){
                if(list.get(i).equals(list.get(j))){
                    list.remove(j);
                    j--;
                }
            }
        }
        System.out.println(list);
    }
}

思路2:递归

public static void main(String[] args) {
    ArrayList list = new ArrayList();
    list.add(20);
    list.add(20);
    list.add(120);
    list.add(320);
    list.add(320);
    list.add(20);
    list.add(230);
    list.add(204);
    list.add(203);
    list.add(20);
    list.add(120);
    list.add(320);
    list.add(120);
    list.add(20);
    list.add(204);
    list.add(203);
    deleteObj(list);
    System.out.println(list);
}
private static void deleteObj(ArrayList list) {
    for (int i = 0; i < list.size(); i++) {
        Object o = list.get(i);
        if(list.indexOf(o)!=list.lastIndexOf(o)){
            list.remove(o);
            deleteObj(list); //递归
        }else{
            return;
        }
    }
}

思路3:创建新集合

public static void main(String[] args) {
    /*思路:创建新集合方式*/
    ArrayList list = new ArrayList();
    list.add("aaa");
    list.add("aaa");
    list.add("bbb");
    list.add("bbb");
    list.add("ccc");
    list.add("ccc");

    ArrayList newList = new ArrayList();
    for (int i = 0; i < list.size(); i++) {
        Object o = list.get(i);
        if(!newList.contains(o)){
            newList.add(o);
        }
    }
    System.out.println(newList);
}
例3:去除ArrayList中重复自定义对象元素
注意事项:重写equals()方法
	@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }
public static void main(String[] args) {
    ArrayList list = new ArrayList();
    list.add(new Student("张三",23));
    list.add(new Student("张三", 23));
    list.add(new Student("张学友", 24));
    list.add(new Student("张学友", 24));
    list.add(new Student("刘德华", 25));
    list.add(new Student("张国荣", 24));
    ArrayList newList = new ArrayList();
    for (int i = 0; i < list.size(); i++) {
        Object o = list.get(i);
        if (!newList.contains(o)) {
            newList.add(o);
        }
    }
    System.out.println(newList);
    //[Student{name='张三', age=23}, Student{name='张学友', age=24}, Student{name='刘德华', age=25}, Student{name='张国荣', age=24}]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值