Java集合框架
来源:互联网 发布:蒙牛微销售打卡软件 编辑:程序博客网 时间:2024/05/31 13:15
一、链表
1.为什么要使用链表?
数组和数组列表存在重大缺陷:如果想从数组中间位置添加或删除一个元素需要付出很大代价,
因为数组中处于被删除元素之后的所有元素都要向数组的前端移动。数组中插入一个元素也是如此。
而使用链表可以解决这个问题。
数组在连续的存储位置上存放对象引用,但链表却将每个对象存放在独立的结点中,每个结点还
存放着序列的下一个结点的引用。在java中链表都是双向的——即每个结点都还存放着指向前驱结点
的引用。
2.链表是一个有序集合,每个对象的位置十分重要,使用LinkedList.add方法只能添加到链表的尾部,有
但是常常需要将元素插入到链表的中间,集合类库中提供了子接口ListIterator,其中包含add方法。
向链表中插入元素
List<String> staff = new LinkedList<>();
staff.add("Amy");
staff.add("Bob");
staff.add("Car");
ListIterator<String> it = staff.listIterator();
it.next();
it.add("Julin");
for(String s : staff) {
System.out.println(s);
}
如果链表中有n个元素,可以在n+1个位置进行插入新的元素。例:
|ABCD
A|BCD
AB|CD
ABC|D
ABCD|
|表示插入的位置
删除链表中的元素
Java集合类库中提供了一个LinkedList表示链表。
List<String> staff = new LinkedList<>();
staff.add("Amy");
staff.add("Bob");
staff.add("Car");
Iterator<String> it = staff.iterator();
String first = it.next();
String second = it.next();
it.remove();
System.out.println("first : "+first);
System.out.println("second : "+second);
for(String s : staff) {
System.out.println(s);
}
输出的结果为:
first : Amy
second : Bob
Amy
Car
替换指定位置的元素
在链表中ListIterator中提供了set方法,可以替换指定位置的元素
ListIterator<String> it = staff.listIterator();
it.next();
it.set(newValue);
3.链表不支持快速的随机访问,如果要访问第n个元素,就必须从头开始越过n-1个元素
二、数组列表(ArrayList)
ArrayList和Vector:
Vector类的所有方法都是同步的,可以由多个线程访问一个Vector对象,但是由一个线程访问时
同步操作会耗费大量的时间。因此在不需要同步的时候使用ArrayList。
三、散列集
链表和数组可以按照意愿排列次序。但是如果想要查看某个指定的元素,却又忘记了它所在的位置,就需要
访问所有的元素。
HashSet无序不重复的。
四、树集
TreeSet树集是一个有序集合,可以以任意顺序将元素插入集合中。在对集合进行遍历时,每个值将自动
的按照排序之后的顺序呈现。
SortedSet<String> set = new TreeSet<>();
set.add("Bob");
set.add("Amy");
set.add("Car");
for(String s : set) {
System.out.println(s);
}
将一个元素添加到树中比添加到散列表中要慢,但是与将元素添加到数组或链表的正确位置上相比还是快得多。
1.为什么要使用链表?
数组和数组列表存在重大缺陷:如果想从数组中间位置添加或删除一个元素需要付出很大代价,
因为数组中处于被删除元素之后的所有元素都要向数组的前端移动。数组中插入一个元素也是如此。
而使用链表可以解决这个问题。
数组在连续的存储位置上存放对象引用,但链表却将每个对象存放在独立的结点中,每个结点还
存放着序列的下一个结点的引用。在java中链表都是双向的——即每个结点都还存放着指向前驱结点
的引用。
2.链表是一个有序集合,每个对象的位置十分重要,使用LinkedList.add方法只能添加到链表的尾部,有
但是常常需要将元素插入到链表的中间,集合类库中提供了子接口ListIterator,其中包含add方法。
向链表中插入元素
List<String> staff = new LinkedList<>();
staff.add("Amy");
staff.add("Bob");
staff.add("Car");
ListIterator<String> it = staff.listIterator();
it.next();
it.add("Julin");
for(String s : staff) {
System.out.println(s);
}
如果链表中有n个元素,可以在n+1个位置进行插入新的元素。例:
|ABCD
A|BCD
AB|CD
ABC|D
ABCD|
|表示插入的位置
删除链表中的元素
Java集合类库中提供了一个LinkedList表示链表。
List<String> staff = new LinkedList<>();
staff.add("Amy");
staff.add("Bob");
staff.add("Car");
Iterator<String> it = staff.iterator();
String first = it.next();
String second = it.next();
it.remove();
System.out.println("first : "+first);
System.out.println("second : "+second);
for(String s : staff) {
System.out.println(s);
}
输出的结果为:
first : Amy
second : Bob
Amy
Car
替换指定位置的元素
在链表中ListIterator中提供了set方法,可以替换指定位置的元素
ListIterator<String> it = staff.listIterator();
it.next();
it.set(newValue);
3.链表不支持快速的随机访问,如果要访问第n个元素,就必须从头开始越过n-1个元素
二、数组列表(ArrayList)
ArrayList和Vector:
Vector类的所有方法都是同步的,可以由多个线程访问一个Vector对象,但是由一个线程访问时
同步操作会耗费大量的时间。因此在不需要同步的时候使用ArrayList。
三、散列集
链表和数组可以按照意愿排列次序。但是如果想要查看某个指定的元素,却又忘记了它所在的位置,就需要
访问所有的元素。
HashSet无序不重复的。
四、树集
TreeSet树集是一个有序集合,可以以任意顺序将元素插入集合中。在对集合进行遍历时,每个值将自动
的按照排序之后的顺序呈现。
SortedSet<String> set = new TreeSet<>();
set.add("Bob");
set.add("Amy");
set.add("Car");
for(String s : set) {
System.out.println(s);
}
将一个元素添加到树中比添加到散列表中要慢,但是与将元素添加到数组或链表的正确位置上相比还是快得多。
阅读全文
0 0
- Java集合:集合框架
- 【Java】java集合框架
- [Java]Java集合框架
- JAVA集合框架和集合
- 【集合】Java集合框架介绍
- Java集合之集合框架
- [集合]Java的集合框架 Collection集合
- Java集合框架 (一)
- Java集合框架 (二)
- Java集合框架(三)
- Java集合框架
- 也来谈Java集合框架
- 也来谈Java集合框架
- Java集合框架 (一)
- Java集合框架
- 也来谈Java集合框架
- java集合框架
- Java集合框架总结
- 网络编程问题
- java验证电话号码
- Android 自定义控件零基础(1)
- TCP/IP四层模型和OSI七层模型的概念
- Spring的理解
- Java集合框架
- 分块初学(1)
- LeetCode 152 Maximum Product Subarray (思维)
- svn客户端创建
- PCManFTP v2.0(CVE-2013-4730)漏洞分析报告
- java+mysql开发的系统,在系统中数据库备份还原的思路与实现
- Java入门--main
- 自定义控件之绘图篇:drawText()详解
- 凡