JAVA集合框架

 

JAVA集合框架:

数组的局限性:数组长度一旦确定,将不能随意扩展。一个系统如果要存储的数据的长度是不确定的,那么使用数组来存储就不方便了,此时可以选择使用集合这种数据存储结构。

Iterable--Collection
       --List(有序不唯一,允许元素为null)
            ArrayList
            LinkedList
       --Set(无序的唯一)

ArrayList特点:

这个集合它的存储结构和数组类似,被称做动态数组(长度可动态扩展的数组),在内存中分配连续的存储空间。

遍历元素和随机访问元素的效率比较高,而添加和删除元素的效率比较低。

添加和插入元素

public class ArrayListTest1 {
    public static void main(String[] args) {
        ArrayList list=new ArrayList();
        list.add("tom");
        list.add("mary");
        list.add("kitty");
        list.add("jerry");

        //遍历集合
        for(int i=0;i<list.size();i++) {
            //获得集合元素
            String s=(String)list.get(i);
            System.out.print(s+"\t");
        }
        list.add("vivi");

        System.out.println("\n元素的个数:"+list.size());
        //插入
        list.add(0, "apple");
        System.out.println("=================");
        //遍历集合
        for(int i=0;i<list.size();i++) {
                    //获得集合元素
                    String s=(String)list.get(i);
                    System.out.print(s+"\t");
        }
    }
}

删除元素

public class ArrayListTest2 {

    public static void main(String[] args) {
        ArrayList list=new ArrayList();
        list.add("tom");
        list.add("jack");
        list.add("mary");
        list.add("lily");

        for(int i=0;i<list.size();i++) {
            String name=(String)list.get(i);
            System.out.println(name);
        }
        //删除元素
        //判断一下要删除的元素是否存在
        if(list.contains("mary")) {
            list.remove("mary");
            if(!list.contains("mary")) {
                System.out.println("删除成功!");
                System.out.println("==================");
                for(int i=0;i<list.size();i++) {
                    String name=(String)list.get(i);
                    System.out.println(name);
                }
            }
        }else {
            System.out.println("要删除的元素不存在");
        }
    }
}

LinkedList

是以链表的方式来保存数据元素的

因为这种存储结构使得Linkedlist在插入元素和删除元素时效率会比较高,而遍历元素时效率会比较低。

Linkedlist提供了在集合的首尾查看添加删除元素的一些方法。

public class LinkedListTest1 {
    public static void main(String[] args) {
        LinkedList list=new LinkedList();
        list.add("tom");
        list.add("jerry");
        list.add("kiity");
        for(int i=0;i<list.size();i++) {
            System.out.println((String)list.get(i));
        }
        list.addFirst("mary");
        list.addLast("vivi");
        System.out.println("====================");
        for(int i=0;i<list.size();i++) {
            System.out.println((String)list.get(i));
        }

        System.out.println("第一个元素:"+list.getFirst().toString());
        System.out.println("最后一个元素:"+list.getLast().toString());

        list.removeFirst();
        list.removeLast();
        System.out.println("========================");
        for(int i=0;i<list.size();i++) {
            System.out.println((String)list.get(i));
        }
    }
}

面试题:

  1. 总结ArrayList和LinkedList的异同

  2. Vector和ArrayList的异同?

Vector和ArrayList一样都是长度可变的动态数组。所不同的是Vector是JDK1.0推出的集合,是线程同步的,ArrayList是JDK1.2推出的,没有实现线程同步,所以的Vector的效率低,线程安全,ArrayList线程非安全,效率高。

泛型集合:

在jdk1.5时推出了泛型集合,在泛型集合出现前,集合中数据的类型是不能控制,在一个集合中可以添加不同数据类型的元素,这样会给集合元素的访问带来安全隐患,极容易引发ClassCastException。泛型集合出现后,集合中添加的元素可以通过参数来进行控制,也就是类型参数化,避免访问集合元素时的拆箱操作,减少了判断逻辑,降低了安全隐患。 Java中每一种集合都支持泛型。

public class ArrayListTest8 {

    public static void main(String[] args) {
        ArrayList<Student> students=new ArrayList<>();
        Student s1=new Student("tom",19,"男");
        Student s2=new Student("jerry",20,"男");
        Teacher t1=new Teacher("mary","java");

        students.add(s1);
        students.add(s2);
        //students.add(t1);
        for(int i=0;i<students.size();i++) {
            Student s=students.get(i);
            System.out.println("name:"+s.name+"age:"+s.age+"gender:"+s.gender);
        }
    }
}
posted @ 2019-08-08 19:37  流氓的夏天  阅读(128)  评论(0编辑  收藏  举报