java集合之ArrayList和LinkedList应用

java集合之ArrayList和LinkedList

1.区别

这里写图片描述

1.  ArrayList:数组实现
    数组实现的特点:查询快 增删慢(参照与LinkdList);
    查询:直接使用角标查询
    增删:需要把要添加的 元素的位置 后面的元素 全部移动一位

2.  LinkedList:链表的实现
    链表特点 
    链表实现:特点增删快 查询慢 
    查询:判断离头近还是离尾近 然后从头或尾 一个一个查找 找到为止
    增删:将要插入的元素的地址保存 后面的元素 不用进行任改动

3.  什么时候使用ArrayList,什么时候使用LinkedList
    查询多就使用ArrayList  
    增删多就使用LinkedList    

2.List

2.1 添加元素
    List list = new ArrayList();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
//  使用List中的添加方法 add(int index ,Object obj)
    list.add(0,"x");//添加的角标 就是后面元素 所在位置 不能越界
    System.out.println(list);

运行结果:
[x, a, b, c, d]
注释:
1.使用List中的添加方法 add(int index ,Object obj)
2.添加的角标 就是后面元素 所在位置 不能越界
2.2通过角标获取对应的元素
    Object object = list.get(2);
    System.out.println(object);
运行结果:
b
2.3通过get进行遍历
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }

运行结果:
x
a
b
c
d
2.4set方法 对应位置添加元素
    list.set(4, "z");
    System.out.println(list);

运行结果:
[x, a, b, c, z]
2.5根据角标删除元素 返回的是被被删除的角标
    Object object2 = list.remove(3);
    System.out.println(object2);
    System.out.println(list);

运行结果:
c
[x, a, b, z]
2.6删除集合中的111
    List list = new ArrayList();
    list.add(111);//自动装箱
    list.add(222);
    list.add(333);
//  删除 111元素
    Object object = list.remove(0);
//  list.remove(111);
//  这里删除的时候 系统没有给你自动装箱 就按数字传人的方法
//  所以调用的是按角标删除的方法 所以越界
//  如果你非要使用按元素删除需要手动装箱
    list.remove(Integer.valueOf(222));
    System.out.println(object);
    System.out.println(list);

运行结果:
111
[333]
2.7 并发修改异常
    List list = new ArrayList();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    添加完4个元素 这时 集合的长度为4
    如果使用迭代器遍历 那么长度是固定的 4 不能变
    获取集合中的迭代器
    Iterator iterator = list.iterator();
    while (iterator.hasNext()) {
    if (iterator.next().equals("b")) {
        list.add("oh.Yes");//不能修改集合的长度

    }

    }
运行结果:
ConcurrentModificationException(并发修改异常)

注释:在迭代器遍历 的时候 不要直接使用集合坐操作
2.8让迭代器向集合中添加元素
public class text {
public static void main(String[] args) {
    List list = new ArrayList();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
//  取出list特有的迭代器
    ListIterator listIterator = list.listIterator();
    while (listIterator.hasNext()) {
        if (listIterator.next().equals("b")) {
//          让迭代器向集合中添加元素
            listIterator.add("oh-yes");
        }

    }
    System.out.println(list);
//  注意:在迭代器中进行对集合的添加或者是删除 要使用迭代器中的方法
//  不能直接进行集合去操作


    }

}

运行结果:
[a, b, oh-yes, c, d]
2.9 Vector集合 迭代器遍历
public class text {
public static void main(String[] args) {
    //  Vector(使用数组来实现的 已被ArrayList 替代)
    //创建一个Vector集合 迭代器遍历
        Vector vector = new Vector();
        vector.addElement("a");
        vector.addElement("b");
        vector.addElement("c");
        vector.addElement("d");
       System.out.println(vector);
    //   迭代器遍历
    //   获取迭代器
       Enumeration elEnumeration = vector.elements();
       while (elEnumeration.hasMoreElements()) {
        System.out.println(elEnumeration.nextElement());

    }

    }

}

运行结果:
[a, b, c, d]
a
b
c
d
2.9迭代反转遍历
public class text {
public static void main(String[] args) {
    List list = new ArrayList();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    ListIterator listIterator = list.listIterator();
    while(listIterator.hasNext()) {
        System.out.println(listIterator.next());
    }
//  逆向
//  hasPrevious 判断前一个元素有没有
    while (listIterator.hasPrevious()) {
        System.out.println(listIterator.previous());

    }

    }

}

运行结果:
a
b
c
d
d
c
b
a
2.10取集合首尾元素
public class text {
public static void main(String[] args) {
    LinkedList linkedList = new LinkedList();
//  使用addfirst方法添加
    linkedList.addFirst("a");
    linkedList.addFirst("b");
    linkedList.addFirst("c");
    linkedList.addFirst("n");
    linkedList.addFirst("h");
    System.out.println(linkedList);
//  获取头尾元素
    System.out.println(linkedList.getFirst());
    System.out.println(linkedList.getLast());

    }

}

运行结果:
[h, n, c, b, a]
h
a
3.队列和栈
 队列和栈
 栈结构的特点:先进后出
 队列结构特点:现进先出

1.倒删集合 模拟出栈

public class text {
public static void main(String[] args) {
    LinkedList list = new LinkedList();
    list.addLast("a");
    list.addLast("b");
    list.addLast("c");
    list.addLast("d");
//  模拟出栈
System.out.println(list);
while (!list.isEmpty()) {
    Object str = list.removeLast(); 
    System.out.println(str);
}

    }

}

运行结果:
[a, b, c, d]
d
c
b
a
3.2去除集合重复元素
public class text {
public static void main(String[] args) {
    ArrayList list = new ArrayList();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    ArrayList list1 = new ArrayList();
    Iterator iterator = list.iterator();
    while (iterator.hasNext()) {
//      判断是否在在新数组中
        Object next = iterator.next();//不能调用两次next()方法
        if (!list1.contains(next)) {
//          将元素添加到新数组中
            list1.add(next);
        }

    }
    System.out.println(list1);

    }

}

运行结果:
[a, b, c, d]
3.3对象去重
public class text {
public static void main(String[] args) {
    ArrayList list = new ArrayList();
//  地址都不一样 所以都不是同一个对象
//  想去重根据的是对象的名字和年龄去重 如果年龄和名字重复就去掉一个

    list.add(new Student("盆盆",13));
    list.add(new Student("试试",13));
    list.add(new Student("盆盆",13));
    list.add(new Student("盆盆",13));
    list.add(new Student("盆盆3",12));
    ArrayList list2 = new ArrayList();
    Iterator iterator = list.iterator();
    while (iterator.hasNext()) {
        Object next = iterator.next();
//      强转student
        Student student = (Student)next;
        if (!list2.contains(next)) {
            list2.add(next);
        }

    }
    for (Object object : list2) {
        Student student = (Student)object;
        System.out.println(student);
    }

    }

}

注释:在这里Student类中equals方法需要重写

重写equals方法
@Override
    public boolean equals(Object obj) {
    System.out.println("equals方法调用");
//  原来比较的是第地址 已经不能满足2我的需求了
//  我的需求 不看地址 只能看姓名 和 年龄
//  姓名和年龄同时同时认为是同一个对象
//  把传进来的转换成student类型
    Student s = (Student)obj;
//  判断姓名和年龄同时同
        return this.name.equals(s.getName()) && this.age == s.getAge();
    }
 运行结果:
equals方法调用
equals方法调用
equals方法调用
equals方法调用
equals方法调用
Student [name=盆盆, age=13]
Student [name=试试, age=13]
Student [name=盆盆3, age=12]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值