集合相关知识
来源:互联网 发布:red hat linux 6.8安装 编辑:程序博客网 时间:2024/06/05 17:12
一、数组Array和集合的区别:
(1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)
(2)JAVA集合可以存储和操作数目不固定的一组数据。 (3)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。
联系:使用相应的toArray()和Arrays.asList()方法可以回想转换。
二、collection相关函数
确保此 collection 包含指定的元素(可选操作)。
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
移除此 collection 中的所有元素(可选操作)。
如果此 collection 包含指定的元素,则返回 true。
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
比较此 collection 与指定对象是否相等。
返回此 collection 的哈希码值。
如果此 collection 不包含元素,则返回 true。
返回在此 collection 的元素上进行迭代的迭代器。
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
返回此 collection 中的元素数。
返回包含此 collection 中所有元素的数组。
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
boolean
add(E e)
确保此 collection 包含指定的元素(可选操作)。
boolean
addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
void
clear()
移除此 collection 中的所有元素(可选操作)。
boolean
contains(Object o)
如果此 collection 包含指定的元素,则返回 true。
boolean
containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
boolean
equals(Object o)
比较此 collection 与指定对象是否相等。
int
hashCode()
返回此 collection 的哈希码值。
boolean
isEmpty()
如果此 collection 不包含元素,则返回 true。
Iterator<E>
iterator()
返回在此 collection 的元素上进行迭代的迭代器。
boolean
remove(Object o)
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
boolean
removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
boolean
retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
int
size()
返回此 collection 中的元素数。
Object[]
toArray()
返回包含此 collection 中所有元素的数组。
<T> T[]
toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
三、List、Set、Map是这个集合体系中最主要的三个接口。 List和Set继承自Collection接口。 Map也属于集合系统,但和Collection接口不同。
Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。Set 只能通过游标来取值,并且值是不能重复的。
List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。 ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的
Map 是键值对集合。其中key列就是一个集合,key不能重复,但是value可以重复。 HashMap、TreeMap和Hashtable是Map的三个主要的实现类。 HashTable 是线程安全的,不能存储
null
值 HashMap 不是线程安全的,可以存储
null
值
通用的目的实现
接口 实现 哈希表 可变数组 树 链表 哈希表+链表SetHashSet TreeSet LinkedHashSetList ArrayList LinkedList MapHashMap TreeMap LinkedHashMap
四.List和ArrayList Map与HashMap的区别
1.List是接口,List特性就是有序,会确保以一定的顺序保存元素.
ArrayList是它的实现类,是一个用数组实现的List.
Map是接口,Map特性就是根据一个对象查找对象.
HashMap是它的实现类,HashMap用hash表实现的Map,就是利用对象的hashcode(hashcode()是Object的方法)进行快速散列查找.(关于散列查找,可以参看<<数据结构>>)
2.一般情况下,如果没有必要,推荐代码只同List,Map接口打交道.
比如:List list =
new
ArrayList();
这样做的原因是list就相当于是一个泛型的实现,如果想改变list的类型,只需要:
List list =
new
LinkedList();
//LinkedList也是List的实现类,也是ArrayList的兄弟类
这样,就不需要修改其它代码,这就是接口编程的优雅之处.
另外的例子就是,在类的方法中,如下声明:
private
void
doMyAction(List list){}
这样这个方法能处理所有实现了List接口的类,一定程度上实现了泛型函数.
3.如果开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义类.
五、List和Set的区别
1、List中元素有序可重复,Set中元素无需不可重复,重复添加只会保存第一次添加的元素。
2、List中常用方法中有set(int index,E element),set(int index)和get(int index) ,get(int index,E element)方法能灵活添加获取元素,而Set中没有这些方法(无序)。而且其中的Remove方法各不相同List中Remove(int index) ,Set中Remove(Object element)
3.List有三种遍历方式 (1)foreach遍历 (2)Iterator迭代器遍历 (3)通过size()和get()两种方法配合的一般遍历
import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class javaTest2 implements javaTest1 {public static void main(String[] args) { List list=new ArrayList(); list.add(1); list.add(5); list.add('a'); for (Object object : list) { System.out.print(object+" "); } System.out.println(); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+" "); } System.out.println(); Iterator it=list.iterator(); while(it.hasNext()){ System.out.print(it.next()+" "); } }}
运行结果:
1 5 a 1 5 a 1 5 a
Set只有两种遍历方式 (1)foreach遍历 (2)Iterator迭代器遍历
Set set=new HashSet(); set.add(1); set.add(3); set.add('b'); for (Object object : set) { System.out.print(object+" "); } System.out.println(); Iterator its=set.iterator(); while(its.hasNext()){ System.out.print(its.next()+" "); }
运行结果:
1 b 3 1 b 3
六、集合具体实现化类的区别
1、Set实现:HashSet、TreeSet和LinkedSet区别
HashSet将其元素储存在一个哈希表中,它具有最好的性能实现,然而它不保证迭代的顺序;TreeSet将其元素存储在一个红黑树追踪,按元素的值顺序排列,它本质上比HashSet要慢;LinkedHashSet是作为哈希表实现的,用链表链接这些元素,按元素的插入顺序排列
2、List实现 ArrayList和LinkedList
一般大家都知道ArrayList和LinkedList的大致区别:
(1).ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
(2).对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
(3).对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
3、Map实现: HashMap、TreeMap和LinkedMap区别
他们的行为和执行性能和Set中的实现HashSet、TreeSet和LinkedSet类似。另外Hashtable(哈希表)重新实现了Map
0 0
- Android相关知识集合
- npm相关知识集合
- java集合相关知识
- 集合相关知识
- 关于pyhton多线程的相关知识集合
- Web 入门相关知识资料集合
- Android NDK开发相关知识集合
- 集合的排序及相关知识
- Java复习第三天---集合框架的相关知识
- java常用类与集合框架相关知识总结
- 集合知识
- 集合知识
- 集合知识
- 集合相关
- 集合相关
- 集合相关
- Java 集合 6: WeakHashMap扩展知识1(原理与Reference相关)
- java 集合 标识散列映射 及相关知识与实例
- mysql主从数据库配置步骤
- 多线程编程
- 红泥塘项目后台文档
- 1.机器人导航关键技术研究
- python中xrange用法分析
- 集合相关知识
- 【微信小程序】下拉加载多次请求的解决方案,避免用户多次发起请求降低业务处理。
- 【CSS】CSS详细介绍:(HTML/CSS结合方式、CSS代码格式、选择器、盒子模型)
- ubuntu 常用小知识
- C#学习开始
- 关于spring java.lang.IllegalArgumentException: Name for argument type [java.lang.String] 的错误
- ubuntu 14.04 apt-get update 无法找到arm package
- vue绑定click事件
- LPC总线介绍