黑马程序员技术交流社区

标题: 集合的简单使用 [打印本页]

作者: situ    时间: 2018-7-19 20:49
标题: 集合的简单使用
集合框架
下面就对这些常用的集合进行简单分析:
既然都是集合,那么为什么需要这么多接口呢?一个不是更好学吗?
因为每一个容器对数据的存储方式都不同,这个存储方式称为:数据结构。
List和Set的不同
Collertion下有List和Set,其中List元素是有序的,元素可以重复,因为该集合体系有索引。而Set元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。
集合与数组的不同
先说一下数组,数组就是存储一堆相同数据类型的容器,有两种定义方式:
1.     动态定义数组:比如:int[] a=new int[5]; 定义了一个长度为5的整型数组;
2.     静态定义数组:比如:int[] a={1,2,3}, 长度为3,直接给出了元素1,2和3。
重点:数组在运行时,长度是不可变的,而集合长度是可变的。
      数组只可以存储基本数据类型,也可以存储对象,集合只能存储对象,如果想存储基本数据类型们就需要进行包装。
例如:ArrayList<Integer> list=new ArrayList<>();这样就可以存储整型。
集合的使用
集合的使用分为三个步骤:
1.     导包。
2.     创建
3.     使用
常用的方法:
package cn.itcast.list.demo;
import java.util.ArrayList;
/**
*@Description: java类作用描述
*@Author: sgy
*@CreateDate: 2018/7/17$ 16:09$
*/
public class CollectionDemo {
   public static void main(String[] args) {
       //创建一个集合容器,使用collection接口的子类:ArrayList。
       ArrayList al=new ArrayList();
       //1.添加元素 。
       al.add("I Love Java01");
       al.add("I Love Java02");
       al.add("I Love Java03");
       al.add("I Love Java04");
       //打印原集合
       sop(al);
       //2.获取个数。集合长度。
       sop(al.size());  //4
       //3.删除元素
       al.remove("I Love Java02");
       //打印改变后的集合
       sop(al);
       //4.清空集合
       al.clear();
       sop(al);
       //5.判断集合是否为空
       sop(al.isEmpty());
    }
   public static void sop(Object obj){
       System.out.println(obj);
    }
}
运行结果:
List
特有方法,凡是可以操作索引的方法都是List体系特有的方法。
增    add(index,element);           addAll(index,Collection);
删    remove(index);
改    set(index,element);
查    get(index);             subList(from,to);          ListIterrator();
List 集合元素是有序,不唯一:
ArrayList 底层是数组,替代了Vector,查询速度快;
LinkedList 底层是链表,,增删速度快;
Vector 底层也是数组,速度很慢,已经过时;(不再描述)
ArrayList
Array 是数组结构,有角标,查询速度很快。
public class ArrayListDemo {
   public static void main(String[] args) {
       ArrayList<String> list = new ArrayList<>();
       String s1 = "曹操";
       String s2 = "孙权";
       String s3 = "刘备";
       list.add(s1);
       list.add(s2);
       list.add(s3);
//获取指定索引位置上的元素
       System.out.println(list.get(2));
       System.out.println(list.get(0));
       System.out.println(list.get(1));
//集合的长度
       System.out.println(list.size());
//移除指定位置的元素,返回元素值
       System.out.println(list.remove(2));
       System.out.println("====================");
//遍历输出
       for (int i = 0; i < list.size(); i++) {
           System.out.println(list.get(i));
       }
}
运行结果:
LinkedList
link 就是链表结构:增删速度快,而且
有特有方法,addFirst、addLast、removeFirst()、removeLast()、getFirst()、getLast()。
其中getFirst()、getLast()获取但不删除元素,removeFirsst()、removeLast()获取并删除元素。
   public static void main(String[] args) {
       LinkedList list=new LinkedList();
       //将元素添加到集合首,
       list.addFirst("迪丽热巴");
       list.addFirst("古力娜扎");
       list.addFirst("玛尔扎哈");
       //输出结果为 玛尔扎哈、古力娜扎、迪丽热巴
       sop(list);
       //获取首部元素 迪丽热巴
       sop(list.getFirst());
       //获取尾部元素 玛尔扎哈
       sop(list.getLast());
       //移除并获取首部元素,把第一个元素迪丽热巴移除后,古力娜扎就会成为第一个元素
       //所以输出结果为 迪丽热巴 古力娜扎
       sop(list.removeFirst());
       sop(list.removeFirst());
    }
   public static void sop(Object obj){
       System.out.println(obj);
    }
Set
HashSet 底层是哈希表,线程是非同步的,
TreeSet 底层是二叉树。
HashSet
验证HashSet元素的无序性和唯一性,不废话,贴代码
public class HashSetDemo {
   public static void main(String[] args) {
       HashSet hs=new HashSet();
       //加入元素,验证无序性和唯一性
       hs.add("java01");
       hs.add("java01");
       hs.add("java02");
       hs.add("java02");
       hs.add("java03");
       hs.add("java04");
       sop(hs);
    }
   public static void sop(Object obj){
       System.out.println(obj);
    }
}
运行结果:
可以看到,输出结果并不是加入的元素顺序,也没有重复的元素,重复元素的返回值为false.
TreeSet
可以对Set集合中的元素进行排序。二叉树
不废话,上图
运行结果:
可以看出,字母对应的ASCII码表中的数字从小到大,运行几次都是这样的结果,Set集合的无序性是说存和取的顺序不一定一样,TreeSet的有序是说按照一定的规则对其中的元素进行排序。






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