JAVA学习【7】集合框架与Arraylist、Linkedlist、HashSet的基本用法
2016-02-26 16:43
836 查看
参考:http://blog.csdn.net/liulin_good/article/details/6213815
具有相同性质的一类东西称为集合,JAVA中集合是一些具有相同数据类型的数据。
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构,JAVA中集合框架是存储、查找、排序这些相同类型数据的接口、类及其方法。
因此,JAVA集合框架的用法与数组相似,不过方法更多,针对不同问题可以采用不同的数据结构存储元素,元素的查找等操作效率更高,类的使用也更加方便。
JAVA集合框架定义的主要接口有Collection、List、Set,性质如下:
其他Queue、Deque、SortedSet等接口此处不详细说明。
Map是JAVA定义的映射接口,用于存储键-值对,也包含在集合框架中。
上表中,“无序”指元素没有以输入的顺序存放,元素插入(add)的顺序与输出的顺序不一致,“有序”指存放顺序与插入顺序一致。
接口:
Collection接口是List、Set的父接口,不允许存在NULL元素,扩展了Iterable接口,定义了iterator()方法,实现该接口或子接口的类可以采用iterator()和for-each(加强型for)遍历元素。
List接口,与数组相似采用以0开始的索引存放元素,get(int index)获得元素,set(int index, obj)元素幅值。
Set接口,不允许存在重复的元素。
类:
ArrayList类,实现了List接口,采用数组形式存放元素,将元素存储在连续空间中,插入删除元素麻烦,当数组长度不够时,将原数组复制到一个更长的数组中,实现存储长度动态增减。特点:查询快,增删慢,线程不安全,轻量级,有序,最常用。
LinkedList类,实现了List、Deque、Queue接口,采用链表实现, 又一个个存储节点链接起来, 适合插入删除元素等操作,查询元素等操作只能一个节点一个节点顺序遍历。
HashSet类,实现了Set接口,采用哈希表实现,不允许元素重复,若add相同元素,后者将覆盖前者。
TreeSet类,实现了Set接口,采用二叉树实现,能够快速访问大量有序数据。
用法演示:
ArrayList类
运行结果:
4
[abc, abc, def, ghi]
def
3
[abc, jkl, def, ghi]
[abc, def, ghi]
[abc, def]
ArrayList转换成数组:
abc
def
LinkedList类
LinkedList类实现了List、Deque、Queue接口,访问List定义的add()等方法与上面ArrayList类相同,
运行结果:
c
b
a
a
[]
[R, Q, W, E]
[Q, W, E]
[Q, W]
HashSet类
HashSet类无序且元素唯一。
运行结果:
[A, a, B, C, D]
TreeSet类
TreeSet类有序且元素唯一,Integer和String都有有默认排序方式,其他类型必须实现Comparable接口,并且重写compareTo()方法。
Integer和String的默认排序方式都是比较ASCii码值。
运行结果:
[1, A, C, D, a]
在很多情况下,需要遍历集合所有元素,一般采用Iterator或者for-each(加强型for循环),示例如下:
JAVA集合框架类的具体实现和采用的数据结构详见JAVA源代码。
下一篇对JAVA集合框架里的映射接口和类进行简单介绍。
具有相同性质的一类东西称为集合,JAVA中集合是一些具有相同数据类型的数据。
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构,JAVA中集合框架是存储、查找、排序这些相同类型数据的接口、类及其方法。
因此,JAVA集合框架的用法与数组相似,不过方法更多,针对不同问题可以采用不同的数据结构存储元素,元素的查找等操作效率更高,类的使用也更加方便。
JAVA集合框架定义的主要接口有Collection、List、Set,性质如下:
其他Queue、Deque、SortedSet等接口此处不详细说明。
Map是JAVA定义的映射接口,用于存储键-值对,也包含在集合框架中。
上表中,“无序”指元素没有以输入的顺序存放,元素插入(add)的顺序与输出的顺序不一致,“有序”指存放顺序与插入顺序一致。
接口:
Collection接口是List、Set的父接口,不允许存在NULL元素,扩展了Iterable接口,定义了iterator()方法,实现该接口或子接口的类可以采用iterator()和for-each(加强型for)遍历元素。
List接口,与数组相似采用以0开始的索引存放元素,get(int index)获得元素,set(int index, obj)元素幅值。
Set接口,不允许存在重复的元素。
类:
ArrayList类,实现了List接口,采用数组形式存放元素,将元素存储在连续空间中,插入删除元素麻烦,当数组长度不够时,将原数组复制到一个更长的数组中,实现存储长度动态增减。特点:查询快,增删慢,线程不安全,轻量级,有序,最常用。
LinkedList类,实现了List、Deque、Queue接口,采用链表实现, 又一个个存储节点链接起来, 适合插入删除元素等操作,查询元素等操作只能一个节点一个节点顺序遍历。
HashSet类,实现了Set接口,采用哈希表实现,不允许元素重复,若add相同元素,后者将覆盖前者。
TreeSet类,实现了Set接口,采用二叉树实现,能够快速访问大量有序数据。
用法演示:
ArrayList类
import java.util.*; public class Main{ public static void main(String[] args){ ArrayList<String> al = new ArrayList<String>(); al.add("abc"); al.add("abc"); al.add("def"); al.add("ghi"); System.out.println(al.size()); System.out.println(al); System.out.println(al.get(2)); System.out.println(al.indexOf("ghi")); al.set(1, "jkl"); System.out.println(al); al.remove(1); System.out.println(al); al.remove("ghi"); System.out.println(al); System.out.println("ArrayList转换成数组:"); String[] str = new String[al.size()]; str = al.toArray(str); for(String s:str) System.out.println(s); } }
运行结果:
4
[abc, abc, def, ghi]
def
3
[abc, jkl, def, ghi]
[abc, def, ghi]
[abc, def]
ArrayList转换成数组:
abc
def
LinkedList类
LinkedList类实现了List、Deque、Queue接口,访问List定义的add()等方法与上面ArrayList类相同,
import java.util.*; public class Main{ public static void main(String[] args){ LinkedList<String> ll = new LinkedList<String>(); //现栈 ll.push("a"); ll.push("a"); ll.push("b"); ll.push("c"); System.out.println(ll.pop()); System.out.println(ll.pop()); System.out.println(ll.pop()); System.out.println(ll.pop()); System.out.println(ll); //双向列表 ll.add("Q"); ll.add("W"); ll.addLast("E"); ll.addFirst("R"); System.out.println(ll); ll.removeFirst(); System.out.println(ll); ll.removeLast(); System.out.println(ll); } }
运行结果:
c
b
a
a
[]
[R, Q, W, E]
[Q, W, E]
[Q, W]
HashSet类
HashSet类无序且元素唯一。
import java.util.*; public class Main{ public static void main(String[] args){ HashSet<String> hs = new HashSet<String>(); hs.add("A"); hs.add("A"); hs.add("a"); hs.add("B"); hs.add("D"); hs.add("C"); System.out.println(hs); } }
运行结果:
[A, a, B, C, D]
TreeSet类
TreeSet类有序且元素唯一,Integer和String都有有默认排序方式,其他类型必须实现Comparable接口,并且重写compareTo()方法。
Integer和String的默认排序方式都是比较ASCii码值。
import java.util.*; public class Main{ public static void main(String[] args){ TreeSet<String> ts = new TreeSet<String>(); ts.add("A"); ts.add("A"); ts.add("a"); ts.add("1"); ts.add("D"); ts.add("C"); System.out.println(ts); } }
运行结果:
[1, A, C, D, a]
在很多情况下,需要遍历集合所有元素,一般采用Iterator或者for-each(加强型for循环),示例如下:
import java.util.*; public class Main{ public static void main(String[] args){ TreeSet<String> ts = new TreeSet<String>(); ts.add("A"); ts.add("B"); ts.add("D"); ts.add("C"); Iterator<String> it = ts.iterator(); while(it.hasNext()){ String element = it.next(); System.out.println(element); } for(String s:ts) System.out.println(s);; } }
JAVA集合框架类的具体实现和采用的数据结构详见JAVA源代码。
下一篇对JAVA集合框架里的映射接口和类进行简单介绍。
相关文章推荐
- Spring Aop自定义注解实现日志管理
- JAVA 后台计算 经纬度 最短距离
- Java 单例模式的使用
- 关于Date
- [Leetcode之Search in Rotated Sorted Array II (Java)
- Java的方法签名
- java 直接插入排序
- java 选择排序
- JDK与JRE
- java 线程
- Spring配置c3p0、dbcp数据库连接池
- 001_MyEclipse之基本工作空间配置
- spring注解-@Component(不推荐使用)、@Repository、@Service、@Controller
- JVM内幕:Java虚拟机详解
- JAVA程序中SQL语句无法传递中文参数
- JAVA技术路线图
- 浅识内部类
- 从头认识SpringBatch批处理框架---JobRepository数据库存储元数据并分析存储元数据表
- 高效Java编程工具集锦
- java中XML格式的字符串4读取方式的简单比较