黑马程序员技术交流社区

标题: 【哈尔滨+梦想开始的地方】初识集合。。。 [打印本页]

作者: 技术小牛    时间: 2015-12-13 20:09
标题: 【哈尔滨+梦想开始的地方】初识集合。。。
说起集合不得不说的就是Java中的集合体系:
集合分为单列集合和双列集合:
单列集合的顶层接口是:Collection
双列集合的顶层接口为:Map
单列集合中有两个体系:List体系和Set体系
其中List体系中的元素是可重复的、存取无序的。其中包括ArrayList集合、Vector集合、还有LinkedList集合。
说起List集合的这三个儿子可真是各有千秋:其中ArrayList集合比较常见,也比较常用。它的底层是数组结构,所以查询比较快,但是有利就有弊。他增删比较慢。它是不同步的,也就是不安全。
Vector集合是最不受待见的,现在基本不用了。它的底层也是数组结构,所以查询比较快,但是有利就有弊。他增删比较慢。它是同步的,也就是安全的,所以效率不较低。
LinkedList集合底层是链表结构,查询慢,但是增删快,是不同步的。效率比较快。
Set体系是无序的是不可重复的,它的体系包括三个集合:HashSet和TreeSet其中HashSet包括LinkedHashSet。
其中HashSet它的底层是哈希表。它不可重复主要依靠HashCode()和equals()方法,具体的运行过程,咱在这儿就暂且不表了。因为是初识集合嘛。有问题可以给我留言。LinkedHashSet它的底层是链表。它是唯一一个Set体系存取有序的。
再说说TreeSet集合,TreeSet的底层是二叉树具体是二叉树中的红黑树。它是无序。通过基本类实现Comparable接口或者传入比较器(传入比较器的时候一般都是用内明内部类作为实际参数来实现)来实现保证元素唯一性。他也是不可重复的,虽说是不可重复的但是我们可以按需求让它实现重复(毕竟程序员是可以颠覆世界的,只要有电脑,没有做不到,只有想不到)。
下面就说到双列集合了,双列集合的顶层接口是Map。
双列集合望文生义就是有两个参数。可以这么理解,双列集合中有键和值,其中键就像是索引,所以说键是不可重复的。而值是可以重复的。
双列集合包括HashMap和TreeMap其中HashMap包括LinkedHashMap
HashMap底层是哈希表,是线程不安全的效率表较高。
TreeMap底层是二叉树,是线程不安全的,效率比较高。
package com.heima.review;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Vector;

//需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。
public class Day15 {
        public static void main(String[] args) {
                Student[] arr = new Student[5];
                arr[0] = new Student("张三", 23);
                arr[1] = new Student("李四", 24);
                arr[2] = new Student("张三", 25);
                arr[3] = new Student("张三", 26);
                arr[4] = new Student("李四", 27);
                for (Student student : arr) {
                        // System.out.println(student);
                }
                // 集合转化成数组
                Collection col = new ArrayList();
                // 数组转化成集合,但这样会将整个数组作为一个元素存入集合中。
                // col.add(arr);
                // 将数组遍历然后添加到集合中,这样会使每个元素添加到集合中
                for (int i = 0; i < arr.length; i++) {
                        col.add(arr);
                }
                // 迭代器的使用
                // 创建迭代器的过程就是集合对象调用迭代器的过程.
                Iterator it = col.iterator();
                while (it.hasNext()) {
                        // 想使用基本类对象的特有方法时需要向下转型
                        Student s = (Student) it.next();
                        System.out.println(s.getName() + "***" + s.getAge());
                }

                // 集合转化成数组
                Object[] arr1 = col.toArray();
                for (int i = 0; i < arr1.length; i++) {
                        // Student st = (Student)arr;
                        // System.out.println(arr1);//st.getName()+"***"+st.getAge());
                }
                // ConcurrentModificationException并发修改异常,出现原因是在遍历数组的时候用数组修改数组
                /*
                 * 解决办法: 1、用List迭代器便利元素,并且用迭代器的方法来修改数组 2、不用迭代器便利数组用加强for遍历用数组方法修改数组
                 */
                List<String> list = new ArrayList<String>();
                list.add("a");
                list.add("b");
                list.add("world");
                list.add("d");
                list.add("e");

                /*
                 * Iterator it1 = list.iterator();
                 * while(it1.hasNext()) {
                         * String str =(String)it1.next();
                         * if(str.equals("world")){
                         * list.clear();        //这里会抛出ConcurrentModificationException并发修改异常
                         *  }
                         *          }
                 */
                ListIterator<String> li = list.listIterator();
                while (li.hasNext()) {
                        String str = (String) li.next();
                        if (str.equals("a")) {
                                // list.add("java");//利用集合方法修改集合也会出现并发修改异常
                                li.add("java");//怎样将"java"显示出来??
                        }
                        System.out.println(str);
                }
                //笔记中的:集合遍历元素,集合修改元素.是什么意思?在day15笔记中。
                /*for (String string : list) {
                        if("a".equals(string)){
                                list.add("java");
                        }
                }*/
                //vector集合的迭代
                Vector<String> v = new Vector();
                v.add("a");
                v.add("b");
                v.add("c");
                v.add("d");
                Enumeration<String> en = v.elements();
                while(en.hasMoreElements()){
                        System.out.println(en.nextElement());
                }
        }
}



作者: 562181817    时间: 2015-12-13 20:11
very good!
作者: Hansion    时间: 2015-12-13 20:12
加油  !!!!!
作者: yangmimi    时间: 2015-12-13 20:16
支持,赞一个
作者: xuran39847    时间: 2015-12-13 20:40
总结的好!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2