day18List集合(ArrayList&Vector&LinkedList)

        ArrayList:

                底层数据结构是数组,查询快,增删慢

                线程不安全,效率高

        使用ArrayList存储字符串并遍历(如果字符串有重复的需要去除)

package com.shujia.wyh.day18;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListDemo1 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList list = new ArrayList();

        //向集合中添加字符串元素
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("hadoop");
        list.add("hive");
        list.add("hello");
        list.add("spark");
        list.add("java");
        list.add("world");

        System.out.println("去重之前的集合为:" + list);

        //创建一个新的集合保存去重后的元素
        ArrayList list2 = new ArrayList();

        //遍历旧的集合
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            String s = (String) iterator.next();
            //获取到元素之后,拿着这个元素去新集合中查找,如果找到说明重复,就不添加,反之添加到新集合中
            if (!list2.contains(s)) {
                list2.add(s);
            }
        }

        System.out.println("去重后的集合为:" + list2);


    }
}

    使用ArrayList存储自定义对象并遍历(并去重

        contains方法底层调用的是equals方法,但是Student类中并没有重写equals方法所以调用的是Object类中的equals方法,而Object类中的equals方法比较的是地址值,学生对象都是new出来的地址值必然不一样,equals比较的结果永远是false,加上我们代码中的!,结果永远是为true,所以无论如何都会添加到新集合中,最终结果没有去重。

        解决方法:元素类重写equals()方法  自动生成即可
 

package com.shujia.wyh.day18;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


    @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);
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package com.shujia.wyh.day18;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListDemo2 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList list = new ArrayList();

        //创建学生对象
        Student s1 = new Student("小王", 18);
        Student s2 = new Student("小明", 17);
        Student s3 = new Student("小周", 19);
        Student s4 = new Student("小张", 20);
        Student s5 = new Student("小王", 18);

        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        list.add(s5);

        System.out.println(list);
        System.out.println("====================================");

        //创建一个新的集合存储去重后的结果
        ArrayList list2 = new ArrayList();

        //遍历旧的集合
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            Student student = (Student) iterator.next();
            if(!list2.contains(student)){
                list2.add(student);
            }
        }

        System.out.println(list2);

    }
}

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

        Vector特有的方法:
            public void addElement(Object obj)
                将元素添加到集合的末尾  效果上和add()一样
            public Object elementAt(int index)
                获取指定索引处的元素    get(int index)
            public Enumeration elements()
                返回此向量的组件的枚举。

package com.shujia.wyh.day18;

import java.util.Enumeration;
import java.util.Vector;

public class VectorDemo {
    public static void main(String[] args) {
        //创建Vector集合对象
        Vector vector = new Vector();

        //向集合添加元素
        vector.addElement("hello");
        vector.addElement("java");
        vector.add("world");
        vector.addElement("java");


        //public Object elementAt(int index)获取指定索引处的元素    get(int index)
        Object o = vector.elementAt(0);
        System.out.println(o);
        System.out.println(vector.elementAt(1));
        System.out.println(vector.elementAt(2));
        System.out.println(vector.elementAt(3));
        System.out.println(vector.get(3));

        System.out.println("=============================================");
        //public Enumeration elements()  返回此向量的元素的枚举。
        //简单记忆 你就把这个对象看作成一个迭代器
        Enumeration elements = vector.elements();
        while (elements.hasMoreElements()) {
            Object o1 = elements.nextElement();
            String s = (String) o1;
            System.out.println(s);
        }


    }
}

        LinkedList:
            1、底层数据结构是双链表,查询慢,增删快
            2、线程是不安全的,效率高

        LinkedList特有的方法:
            1、添加功能:
                public void addFirst(Object e) 在集合的开头添加元素
                addLast(Object e) 在结合末尾添加元素,等同于add()方法
            2、获取功能:
                public Object getFirst() 获取集合中的第一个元素
                getLast()  获取集合中的最后一个元素
            3、删除功能:
                public Object removeFirst()  从集合中删除第一个元素并返回
                public Object removeLast()   从集合中删除最后一个元素并返回

package com.shujia.wyh.day18;

import java.util.LinkedList;

public class LinkedListDemo1 {
    public static void main(String[] args) {
        //1、创建LinkedList集合对象
        LinkedList linkedList = new LinkedList();

        //2、向集合中添加元素
        linkedList.add("hello");
        linkedList.add("world");
        linkedList.add("java");
        linkedList.add("bigdata");
        linkedList.add("hadoop");
        linkedList.add("hive");

        System.out.println(linkedList);
        System.out.println("=======================================");
        //public void addFirst(Object e) 在集合的开头添加元素
        linkedList.addFirst("spark");
        System.out.println(linkedList);
        //addLast(Object e) 在结合末尾添加元素,等同于add()方法
        linkedList.addLast("Flink");
        System.out.println(linkedList);

        //public Object getFirst() 获取集合中的第一个元素
        Object first = linkedList.getFirst();
        System.out.println(first);
        System.out.println(linkedList);

        //public Object getLast()  获取集合中的最后一个元素
        Object last = linkedList.getLast();
        System.out.println(last);
        System.out.println(linkedList);

        //public Object removeFirst()  从集合中删除第一个元素并返回
        Object o = linkedList.removeFirst();
        System.out.println(o);
        System.out.println(linkedList);

        //public Object removeLast()   从集合中删除最后一个元素并返回
        Object o1 = linkedList.removeLast();
        System.out.println(o1);
        System.out.println(linkedList);


    }
}

        请用LinkedList模拟栈数据结构的集合,并测试

        栈的特点:先进后出

        题目真正的意思是,自己写一个集合类,底层是LinkedList,调用自己定义的方法实现栈数据结构。
 

package com.shujia.wyh.day18;

import java.util.LinkedList;

public class MyStack {
    private LinkedList linkedList;

    MyStack(){
        linkedList = new LinkedList();
    }

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

    public Object myGet(){
//        return linkedList.getFirst();
        return linkedList.removeFirst();
    }

    public boolean myIsEmpty(){
        return linkedList.isEmpty();
    }

}
package com.shujia.wyh.day18;

public class MyStackTest {
    public static void main(String[] args) {
        //创建自己定义的集合类
        MyStack myStack = new MyStack();

        //添加元素到集合
        myStack.myAdd("hello");
        myStack.myAdd("world");
        myStack.myAdd("java");
        myStack.myAdd("bigdata");

        //应该在获取元素之前判断集合中还有没有元素
        while (!myStack.myIsEmpty()){
            Object o = myStack.myGet();
            System.out.println(o);
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值