黑马程序员技术交流社区
标题: 集合的简单使用 [打印本页]
作者: 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 底层也是数组,速度很慢,已经过时;(不再描述)
ArrayListArray 是数组结构,有角标,查询速度很快。
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));
}
}
运行结果:
LinkedListlink 就是链表结构:增删速度快,而且
有特有方法,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);
}
SetHashSet 底层是哈希表,线程是非同步的,
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 |