java基础之集合
来源:互联网 发布:c语言课程考核要求 编辑:程序博客网 时间:2024/05/17 02:11
1. Collectiton:单列存储集合
|--- List 元素是有序的,元素可以重复。因为该集合体系有索引
|--- ArrayList: 底层的数据结构使用的是数组结构 特点:数组元素查询很快,但是增删很慢,因为增删一个元素,数组后面的其他元素都需要变动,线程不同步
|--- LinkList: 底层的数据结构使用的是链表数据结构特点:链表查询比较慢,反正与 数据结构 相反
|--- Vector: 底层是数组数据结构特点:其他与 ArrayList 相同,但是 线程同步,被前者替代了
|--- Set 元素是无序的(存入和取出的顺序不一定一致),元素不可以重复
|--- TreeSet: 可以对 Set 集合中的元素排序,底层数据结构是二叉树。 保证元素的唯一性的一句 compareTo 方法 return 0
TreeSet 排序的第一种方式:让元素自身具备比较性,元素需要实现 Comparable 接口实现 compareTo 方法。这种方式也成为元素的顺序。也即是默认顺
序
TreeSet 排序的第二种方式:当元素不具备比较性时,或者具备的比较性不符合要求。这就要求集合自身具备比较性
在集合初始化时,就让其拥有比较方式
当两种排序都存在时,以比较器为主
|--- HashSet: 底层数据结构是哈希表,线程不同步
HashSet 是如何保证元素的唯一性:
是通过元素的两个方法,HashCode 和 equals 来完成的
如果元素 HashCode 相同,才会判断 equals 是否为 true
如果元素 HashCode 不相同,就不会调用 equals 方法
注意: 对于判断元素是否存在,以及删除等操作,依赖的方法是元素的 hashCsode() 和 equals() 方法
List 集合判断元素是否相同,依据的是元素的 equals() 方法 ArrayList; 注意它们的区别
Map 集合:该集合存储键值对,而且要保证键值的唯一性 双列存储集合
|--- HashMap: 底层是哈希表数据结构,允许使用 null 键 null 值。该集合是不同步的 JDK 1.2 效率高
|--- TreeMap: 底层是二叉树数据结构,线程不同步。可以用于给 Map 集合中的键进行排序。和 Set 很像,Set 底层就是使用 Map集合
|--- Hashtable: 底层是哈希表数据结构,不可以存入 null 键 null 值。该集合是线程同步的; JDK 1.0 效率低
1.添加
put( key , value)
2.删除
clear() remove( Object key)
3.判断
containsKey( Object Key)containsValue( Object Value) isEmpty()
4.获取
get( Object key)size() Values()
KeySet():将 Map 中所有的键存入 Set 集合,在利用迭代器方法取出键值,最后根据 get() 方法取出每一个键值对应的值
entrySet():
2. 集合框架 Collection List Set ArrayList LinkList Vector TreeSet HashSet
ArrayList:
1.add()的参数类型是 Object。以便于接收任意对象 2.集合中存储的都是对象的引用
当我们使用数组时候,长度是固定的。这样让我们有时候使用感觉很麻烦,所以后面就定义了集合;集合可以随着存储元素的增加而增加,也可以随着元素的减少而减少。
数组和集合的区别:
数组:数组既可以存储基本数据类型,也可以存储引用数据类型;存储基本数据类型的时候存储的是值,存储引用基本数据类型的时候存储的地址;数组的长度是固定的,不可变的。
集合:集合只能存储引用数据类型,不过也可以存储基本数据类型(因为JDK新特性,会进行自动装箱;把存储的基本数据类型包装成对象)。集合的长度是可变的,可以随着元素自
动增加。
集合遍历:数组遍历;迭代器遍历
3. 迭代器接口 iterator:
Iterator it = array.iterator(); 获取迭代器,用于取出集合元素
就把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素。
那么取出方式就被定义成了内部类。而每个容器的数据结构不同,所以取出的动作细节也不一样。但是都有共性内容判断和取出。那么可以将共性抽取。
那么这个内部类都符合一个规则,这个规则就是 Iterator
如何获取集合取出对象? 通过一个对外提供的方法 iterator()
for( Iterator it = vec.iterator() ; it.hasNext() ; )
{
show( it.next());
}
迭代器是对集合进行遍历,而每个集合内部的存储结构都是不同的;所以每一个集合存和取都是不同的,这样就可能会要在每一个类中都定义 hasNext() 和 next() 方法。这样就会
让整个集合体系变得非常的臃肿。迭代器就是将这些方法向上抽出为接口,然后各个类实现接口的方法。
好处:规范了集合的遍历方式,整个集合体系都是使用 hasNext() 和 next() 方法来进行遍历;代码实现了底层封装实现,这样使用者不用知道怎么实现的,只要知道使用即可。
4. List:元素是有序的,元素可以重复。因为该集合体系有索引
Set:元素是无序的,元素不可以重复
List:凡是可以操作角标的方法都是该体系特有的方法
List 特有的迭代器 ListIterator: 列表迭代器(是 Iterator 的子接口)
5. List集合:
包括 ArrayList , LinkedList , Vector ;
List 集合的特有功能:
void add(int index,E element)
E remove(int index)
E get(int index)
E set(int index,E element)
Vector 特有功能:
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()
数组和链表的区别:数组查找快但是增删慢;链表查找慢,但是增删快;
ArrayList:底层数据结构是数组,查找快增删慢;线程不安全,但是效率高。
Vector: 底层数据结构是数组,查找快增删慢;线程安全,但是效率不高;
LinkedList: 底层数据结构是链表,查找慢增删快;线程不安全,效率高;
ArrayList 和 Vector 的区别:底层数据结构都是数组;但是前者线程不安全,效率高;后者线程安全的,效率低。
ArrayList 和 LinkedList 的区别:前者底层数据结构是数组,后者底层数据结构是链表;前者数据查找快,增删慢;后者数据查找慢,增删快。但是都是线程不安全。
使用规则:如果查询数据多使用 ArrayList;如果数据修改多使用LinkedList;如果都多使用ArrayList。
6.枚举就是 Vector 特有的取出方式。其实枚举和迭代器很像,简单说就是一样的。
只是因为枚举的名字以及方法的名称太长了,所以逐渐被迭代器所取代
for( Enumeration en = vec.elements(); en.hasMoreElements() ; )
{
show( en.nextElement());
}
7. List 集合判断元素是否相同,依据的是元素的 equals() 方法 ArrayList
8. Set 集合的功能和 Collection集合功能是一致
9. 当排序的时候,主要条件相同时,一定要判断一下次要条件
10. Collections 集合(是一个集合框架工具类):所有方法都是静态的,对集合进行操作的工具类。
Collections.sort(); Collections.max(); Collections.binarySearch(); Collections.fill(); Collections.reverse()
Collections.reverseOrder(); Collections.reverseOrder( 也可以传一个比较器当参数);
11.把数组转换成集合有什么好处: 可以使用集合的思想和方法来操作数组中的元素 注意:将数组转换成集合,不可以使用集合的增删方法操作。因为数组的长度是固定的
为什么要把集合转换成数组: 为了限定对元素的操作,此时元素不需要进行增删
12.高级 for 循环: for( String s : array)
{
System.out.println( s);
}
对集合进行遍历的时候,只能获取元素。但是不能对集合进行操作
迭代器除了遍历外,还可以进行 remove() 集合中元素的操作
ListIterator 可以遍历,还可以进行增删集合元素的操作
13.JDK 1.5版本出现的新特性: 可变参数,其实就是传递数组参数的简写形式,不用每次都去新建一个数组,而可以直接传递数据元素
注意:可变参数 一定要定义在参数列表的最后面
StaticImport 静态导入。 当类名相同时,需要指定具体的包名;
当方法名相同时,需要指定所属的对象或者类
14.System:类中的方法和属性都是静态的
获取系统属性信息: Properties getProperties();
15.Math.ceil(); 返回大于指定数据的最小整数 Math.floor();返回小于指定数据的最大整数 Math.round();四舍五入 Math.pow( 2,3);输出8 二的三次方
Math.random();随机数 返回大于等于0且小于1的随机数
|--- List 元素是有序的,元素可以重复。因为该集合体系有索引
|--- ArrayList: 底层的数据结构使用的是数组结构 特点:数组元素查询很快,但是增删很慢,因为增删一个元素,数组后面的其他元素都需要变动,线程不同步
|--- LinkList: 底层的数据结构使用的是链表数据结构特点:链表查询比较慢,反正与 数据结构 相反
|--- Vector: 底层是数组数据结构特点:其他与 ArrayList 相同,但是 线程同步,被前者替代了
|--- Set 元素是无序的(存入和取出的顺序不一定一致),元素不可以重复
|--- TreeSet: 可以对 Set 集合中的元素排序,底层数据结构是二叉树。 保证元素的唯一性的一句 compareTo 方法 return 0
TreeSet 排序的第一种方式:让元素自身具备比较性,元素需要实现 Comparable 接口实现 compareTo 方法。这种方式也成为元素的顺序。也即是默认顺
序
TreeSet 排序的第二种方式:当元素不具备比较性时,或者具备的比较性不符合要求。这就要求集合自身具备比较性
在集合初始化时,就让其拥有比较方式
当两种排序都存在时,以比较器为主
|--- HashSet: 底层数据结构是哈希表,线程不同步
HashSet 是如何保证元素的唯一性:
是通过元素的两个方法,HashCode 和 equals 来完成的
如果元素 HashCode 相同,才会判断 equals 是否为 true
如果元素 HashCode 不相同,就不会调用 equals 方法
注意: 对于判断元素是否存在,以及删除等操作,依赖的方法是元素的 hashCsode() 和 equals() 方法
List 集合判断元素是否相同,依据的是元素的 equals() 方法 ArrayList; 注意它们的区别
Map 集合:该集合存储键值对,而且要保证键值的唯一性 双列存储集合
|--- HashMap: 底层是哈希表数据结构,允许使用 null 键 null 值。该集合是不同步的 JDK 1.2 效率高
|--- TreeMap: 底层是二叉树数据结构,线程不同步。可以用于给 Map 集合中的键进行排序。和 Set 很像,Set 底层就是使用 Map集合
|--- Hashtable: 底层是哈希表数据结构,不可以存入 null 键 null 值。该集合是线程同步的; JDK 1.0 效率低
1.添加
put( key , value)
2.删除
clear() remove( Object key)
3.判断
containsKey( Object Key)containsValue( Object Value) isEmpty()
4.获取
get( Object key)size() Values()
KeySet():将 Map 中所有的键存入 Set 集合,在利用迭代器方法取出键值,最后根据 get() 方法取出每一个键值对应的值
entrySet():
2. 集合框架 Collection List Set ArrayList LinkList Vector TreeSet HashSet
ArrayList:
1.add()的参数类型是 Object。以便于接收任意对象 2.集合中存储的都是对象的引用
当我们使用数组时候,长度是固定的。这样让我们有时候使用感觉很麻烦,所以后面就定义了集合;集合可以随着存储元素的增加而增加,也可以随着元素的减少而减少。
数组和集合的区别:
数组:数组既可以存储基本数据类型,也可以存储引用数据类型;存储基本数据类型的时候存储的是值,存储引用基本数据类型的时候存储的地址;数组的长度是固定的,不可变的。
集合:集合只能存储引用数据类型,不过也可以存储基本数据类型(因为JDK新特性,会进行自动装箱;把存储的基本数据类型包装成对象)。集合的长度是可变的,可以随着元素自
动增加。
集合遍历:数组遍历;迭代器遍历
3. 迭代器接口 iterator:
Iterator it = array.iterator(); 获取迭代器,用于取出集合元素
就把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素。
那么取出方式就被定义成了内部类。而每个容器的数据结构不同,所以取出的动作细节也不一样。但是都有共性内容判断和取出。那么可以将共性抽取。
那么这个内部类都符合一个规则,这个规则就是 Iterator
如何获取集合取出对象? 通过一个对外提供的方法 iterator()
for( Iterator it = vec.iterator() ; it.hasNext() ; )
{
show( it.next());
}
迭代器是对集合进行遍历,而每个集合内部的存储结构都是不同的;所以每一个集合存和取都是不同的,这样就可能会要在每一个类中都定义 hasNext() 和 next() 方法。这样就会
让整个集合体系变得非常的臃肿。迭代器就是将这些方法向上抽出为接口,然后各个类实现接口的方法。
好处:规范了集合的遍历方式,整个集合体系都是使用 hasNext() 和 next() 方法来进行遍历;代码实现了底层封装实现,这样使用者不用知道怎么实现的,只要知道使用即可。
4. List:元素是有序的,元素可以重复。因为该集合体系有索引
Set:元素是无序的,元素不可以重复
List:凡是可以操作角标的方法都是该体系特有的方法
List 特有的迭代器 ListIterator: 列表迭代器(是 Iterator 的子接口)
5. List集合:
包括 ArrayList , LinkedList , Vector ;
List 集合的特有功能:
void add(int index,E element)
E remove(int index)
E get(int index)
E set(int index,E element)
Vector 特有功能:
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()
数组和链表的区别:数组查找快但是增删慢;链表查找慢,但是增删快;
ArrayList:底层数据结构是数组,查找快增删慢;线程不安全,但是效率高。
Vector: 底层数据结构是数组,查找快增删慢;线程安全,但是效率不高;
LinkedList: 底层数据结构是链表,查找慢增删快;线程不安全,效率高;
ArrayList 和 Vector 的区别:底层数据结构都是数组;但是前者线程不安全,效率高;后者线程安全的,效率低。
ArrayList 和 LinkedList 的区别:前者底层数据结构是数组,后者底层数据结构是链表;前者数据查找快,增删慢;后者数据查找慢,增删快。但是都是线程不安全。
使用规则:如果查询数据多使用 ArrayList;如果数据修改多使用LinkedList;如果都多使用ArrayList。
6.枚举就是 Vector 特有的取出方式。其实枚举和迭代器很像,简单说就是一样的。
只是因为枚举的名字以及方法的名称太长了,所以逐渐被迭代器所取代
for( Enumeration en = vec.elements(); en.hasMoreElements() ; )
{
show( en.nextElement());
}
7. List 集合判断元素是否相同,依据的是元素的 equals() 方法 ArrayList
8. Set 集合的功能和 Collection集合功能是一致
9. 当排序的时候,主要条件相同时,一定要判断一下次要条件
10. Collections 集合(是一个集合框架工具类):所有方法都是静态的,对集合进行操作的工具类。
Collections.sort(); Collections.max(); Collections.binarySearch(); Collections.fill(); Collections.reverse()
Collections.reverseOrder(); Collections.reverseOrder( 也可以传一个比较器当参数);
11.把数组转换成集合有什么好处: 可以使用集合的思想和方法来操作数组中的元素 注意:将数组转换成集合,不可以使用集合的增删方法操作。因为数组的长度是固定的
为什么要把集合转换成数组: 为了限定对元素的操作,此时元素不需要进行增删
12.高级 for 循环: for( String s : array)
{
System.out.println( s);
}
对集合进行遍历的时候,只能获取元素。但是不能对集合进行操作
迭代器除了遍历外,还可以进行 remove() 集合中元素的操作
ListIterator 可以遍历,还可以进行增删集合元素的操作
13.JDK 1.5版本出现的新特性: 可变参数,其实就是传递数组参数的简写形式,不用每次都去新建一个数组,而可以直接传递数据元素
注意:可变参数 一定要定义在参数列表的最后面
StaticImport 静态导入。 当类名相同时,需要指定具体的包名;
当方法名相同时,需要指定所属的对象或者类
14.System:类中的方法和属性都是静态的
获取系统属性信息: Properties getProperties();
15.Math.ceil(); 返回大于指定数据的最小整数 Math.floor();返回小于指定数据的最大整数 Math.round();四舍五入 Math.pow( 2,3);输出8 二的三次方
Math.random();随机数 返回大于等于0且小于1的随机数
0 0
- JAVA基础之集合
- java基础之集合
- java基础之 集合
- JAVA基础之集合
- Java基础之 集合
- java基础之集合
- java基础之集合
- java基础之:集合
- java基础之集合
- Java基础之集合
- Java基础之集合
- java基础之集合
- Java基础之集合
- java基础之集合
- java基础之集合
- Java基础之集合
- Java基础之集合
- java基础之集合
- vector的基本用法
- 细说 JavaBean
- <总结>2015这一年,我在CSDN
- VM+Fedora9.0+Win7(32位)之间建立共享文件夹
- 号外!号外!苹果开发者官网不能访问了。疑似遭到黑客攻击
- java基础之集合
- 1. Spring4.1-依赖注入
- Android之设置EditText输入类型(setInputType()方法和android:inputType属性)
- JAVA注解
- 第14篇 SQL游标、函数的使用方法
- Coursera 台大 机器学习技法 第一讲 Linear Support Vector Machine
- LeetCode之 Nim Game
- 触摸事件类MotionEvent的一些小细节
- App安全测试-软件权限/安装与卸载安全性