Collection
来源:互联网 发布:lol韩服账号淘宝 编辑:程序博客网 时间:2024/06/03 20:41
1.集合
概念:集合是一种可变长度的数组
数据类型:必须是引用数据类型(JDK 1.5提供了自动拆装箱机制)
2.ArrayList的继承体系
public class ArrayList extends AbstractList implements List{}
Collection 接口
|
----------------------------------------------------------------
| |
List接口 (存取有序,有索引,能重複) Set接口(存取无序,無索引,不能重複)
| |
---------------- -------------
| | | |
ArrayList类 LinkedList类 HashSet类 LinkedHashSet类(存取有序)
/*
* 学习Java中三种长度表现形式
* 数组.length 属性 返回值 int
* 字符串.length() 方法,返回值int
* 集合.size()方法, 返回值int
*/
3.Collection接口的方法
Object[] toArray()将集合转换成数组
boolean contains(Object o)判断集合中是否有该对象
void clear() 清空集合中的所有元素(集合仍存在)
void remove(Object o)移除某个集中的某个对象
4.迭代器
概念:迭代器是用来遍历集合元素的接口
迭代器的定义:Iterator it = 集合名.iterator(); 未指定迭代器中的数据类型,it为Iterator类型,其引用指向,Iterator接口实现类的对象
如果需要使用对象中的非继承的特有属性,则需要进行类型转换
Iterator<数据类型> it = 集合名.iterator();已指定迭代器中的数据类型,it为Iterator类型,其引用指向,Iterator接口实现类的对象
如果需要使用对象中的非继承的特有属性,不需要进行类型转换,直接调用
迭代器的方法:
hasNext(); 判断是否有下一个元素,其初始索引指向-1;
next(); 返回集中的下一个元素
注意事项:
1)迭代器中能对集合的进行删,但衹能用it.remove();
5.增强for循环
来源:JDK1.5版本后,出现java.lang.Iterable接口,Collection继承Iterable,用于实现增强for循环
格式:
for(数据类型 对象名 : 集合名){
}
增强for循环,用于遍历集合的对象,其中可以使用,集合自身的方法,对集合进行删除操作
好处:简化了遍历的代码
坏处:无法获取索引
6.泛型
来源:JDK1.5版本后,出现了泛型,用于指定集合中存储的类型,增强程序的安全性
本质:JAVA中的泛型是伪泛型,只在编译时期起作用,编译后,自动去除泛型
好处:将运行时,ClassCastException异常,提前到了编译时期
泛型类:
class 类名<E>{
public <E> function_1( <E> e){}//泛型类中的定义的数据类型,限定了该方法的参数类型和返回值类型
public <W> T[] function_2( T[] w){}//该方法自己定义泛型,不受类泛型影响
}
创建泛型类对象
类名<E> 对象名 = new 类名<E>();
泛型的接口:
带有泛型的接口:
public interface<E> 接口名{
abstract void 方法名(<E> e);
}
接口的实现类:
1)
public class 类名<E> implements 接口名<E>{
}
该方法,在继承时不指定泛型的数据类型,数据类型在创建对象时由对象指定
2)
public class 类名 implements 接口名<E>{
public funciont (<String> s){}
}
该方法,在继承时直接在重写接口的方法时指定泛型的数据类型
泛型的通配符:
<?> 其中问号就是通配符,其可以代码任意数据类型
泛型的限定:
<? extends A> 限定的是父类,上限限定,其对象可以是A的对象或者A的子类对象
<? super A> 限定的是子类,下限限定,其对象可以是A的对象或者A的父类对象
7.List接口
特点:
1)存取有序
2)有索引
3)可重复
主要实现类:
ArrayList:
存储形式:底层是数组实现
特点:
1)增加删除慢
2)查询快
LinkedList:
存储形式:链表
特点:
1)增加删除块
2)查询慢
特有方法:
1)E removeFirst()删除第一个元素,并且返回值为删除的元素
2)E removeLast()删除最后一个元素,并且返回值为删除的元素
3) addFirst(E e)添加一个元素到起始索引
4) addLast(E e)添加一个元素到末尾索引
5)E getFirst()获得起始索引的值
6)E getLast() 获得末尾索引的值
方法:
特有方法:使用索引进行操作
1)void add(index i ,Object o)
2)Object remove(int index)//返回值是被删除的元素
3) Object set(int index,Object o)//返回值是被覆盖之前的元素
4) Object get(int index)//返回值是该索引的上的元素的值
其它方法:
1)void add(Object o)//添加元素
2)Object remove(Object o)//移除元素
8.迭代器的并发修改异常(ConcurrentModificationException)
异常产生原因:在使用迭代器迭代集合的时候,修改集合的长度
避免手段:
1)不在迭代器迭代过程中修改长度
2)使用ListIterator迭代器操作元素
9.数据的存储结构
1)栈:先进后出
2)队列:先进先出
3)链表:增删块,查询慢
4)数组:增删慢,查询快
10.Vector类
概念:是Java早期的集合,List集合由该类改进而来
特点:是同步的
功能:该类提供的枚举Enumeration作为取出方式,是早期的迭代器
11.Set集合
特点:
1)存取无序
2)不可重复
3)无索引
Hash表:
加载因子:
当集合中的存储的元素数量>Hash表数量*加载因子,集合就要扩容
注意点:
如果未重写hashCode()方法,则在添加过程中,可以重复添加值相同的对象,因为系统返回的HashCode每次不一致
如果未重写equals()方法,则比较的是地址值,地址值相同的对象,可能值不同
存储顺序:
1)先根据对象计算出hashCode码
2)在Set集合中查询是否存在该hashCode,如果不存在,则直接存入,若存在,则进行第三步
3)若使用equals方法,比较值是否相等,若不相等,则存入,若相等,则不存入
主要实现类:
HashSet
特点:
数据结构:采用哈希表(属于散列表,JAVA有8种数据结构,散列表是其中一种),数组与链表的结合体
存取数据均比较快
线程不安全
LinkedHashSet
特点:
数据结构:基于链表的哈希表
与List区别:
去重原理:Set集合在存储数据的时候会调用hashCode()和equals()方法进行重复元素判断
A:hashCode和equals的面试题
/*
* 两个对象 Person p1 p2
* 问题: 如果两个对象的哈希值相同 p1.hashCode()==p2.hashCode()
* 两个对象的equals一定返回true吗 p1.equals(p2) 一定是true吗
* 正确答案:不一定
*
* 如果两个对象的equals方法返回true,p1.equals(p2)==true
* 两个对象的哈希值一定相同吗
* 正确答案: 一定
*/
概念:集合是一种可变长度的数组
数据类型:必须是引用数据类型(JDK 1.5提供了自动拆装箱机制)
2.ArrayList的继承体系
public class ArrayList extends AbstractList implements List{}
Collection 接口
|
----------------------------------------------------------------
| |
List接口 (存取有序,有索引,能重複) Set接口(存取无序,無索引,不能重複)
| |
---------------- -------------
| | | |
ArrayList类 LinkedList类 HashSet类 LinkedHashSet类(存取有序)
/*
* 学习Java中三种长度表现形式
* 数组.length 属性 返回值 int
* 字符串.length() 方法,返回值int
* 集合.size()方法, 返回值int
*/
3.Collection接口的方法
Object[] toArray()将集合转换成数组
boolean contains(Object o)判断集合中是否有该对象
void clear() 清空集合中的所有元素(集合仍存在)
void remove(Object o)移除某个集中的某个对象
4.迭代器
概念:迭代器是用来遍历集合元素的接口
迭代器的定义:Iterator it = 集合名.iterator(); 未指定迭代器中的数据类型,it为Iterator类型,其引用指向,Iterator接口实现类的对象
如果需要使用对象中的非继承的特有属性,则需要进行类型转换
Iterator<数据类型> it = 集合名.iterator();已指定迭代器中的数据类型,it为Iterator类型,其引用指向,Iterator接口实现类的对象
如果需要使用对象中的非继承的特有属性,不需要进行类型转换,直接调用
迭代器的方法:
hasNext(); 判断是否有下一个元素,其初始索引指向-1;
next(); 返回集中的下一个元素
注意事项:
1)迭代器中能对集合的进行删,但衹能用it.remove();
5.增强for循环
来源:JDK1.5版本后,出现java.lang.Iterable接口,Collection继承Iterable,用于实现增强for循环
格式:
for(数据类型 对象名 : 集合名){
}
增强for循环,用于遍历集合的对象,其中可以使用,集合自身的方法,对集合进行删除操作
好处:简化了遍历的代码
坏处:无法获取索引
6.泛型
来源:JDK1.5版本后,出现了泛型,用于指定集合中存储的类型,增强程序的安全性
本质:JAVA中的泛型是伪泛型,只在编译时期起作用,编译后,自动去除泛型
好处:将运行时,ClassCastException异常,提前到了编译时期
泛型类:
class 类名<E>{
public <E> function_1( <E> e){}//泛型类中的定义的数据类型,限定了该方法的参数类型和返回值类型
public <W> T[] function_2( T[] w){}//该方法自己定义泛型,不受类泛型影响
}
创建泛型类对象
类名<E> 对象名 = new 类名<E>();
泛型的接口:
带有泛型的接口:
public interface<E> 接口名{
abstract void 方法名(<E> e);
}
接口的实现类:
1)
public class 类名<E> implements 接口名<E>{
}
该方法,在继承时不指定泛型的数据类型,数据类型在创建对象时由对象指定
2)
public class 类名 implements 接口名<E>{
public funciont (<String> s){}
}
该方法,在继承时直接在重写接口的方法时指定泛型的数据类型
泛型的通配符:
<?> 其中问号就是通配符,其可以代码任意数据类型
泛型的限定:
<? extends A> 限定的是父类,上限限定,其对象可以是A的对象或者A的子类对象
<? super A> 限定的是子类,下限限定,其对象可以是A的对象或者A的父类对象
7.List接口
特点:
1)存取有序
2)有索引
3)可重复
主要实现类:
ArrayList:
存储形式:底层是数组实现
特点:
1)增加删除慢
2)查询快
LinkedList:
存储形式:链表
特点:
1)增加删除块
2)查询慢
特有方法:
1)E removeFirst()删除第一个元素,并且返回值为删除的元素
2)E removeLast()删除最后一个元素,并且返回值为删除的元素
3) addFirst(E e)添加一个元素到起始索引
4) addLast(E e)添加一个元素到末尾索引
5)E getFirst()获得起始索引的值
6)E getLast() 获得末尾索引的值
方法:
特有方法:使用索引进行操作
1)void add(index i ,Object o)
2)Object remove(int index)//返回值是被删除的元素
3) Object set(int index,Object o)//返回值是被覆盖之前的元素
4) Object get(int index)//返回值是该索引的上的元素的值
其它方法:
1)void add(Object o)//添加元素
2)Object remove(Object o)//移除元素
8.迭代器的并发修改异常(ConcurrentModificationException)
异常产生原因:在使用迭代器迭代集合的时候,修改集合的长度
避免手段:
1)不在迭代器迭代过程中修改长度
2)使用ListIterator迭代器操作元素
9.数据的存储结构
1)栈:先进后出
2)队列:先进先出
3)链表:增删块,查询慢
4)数组:增删慢,查询快
10.Vector类
概念:是Java早期的集合,List集合由该类改进而来
特点:是同步的
功能:该类提供的枚举Enumeration作为取出方式,是早期的迭代器
11.Set集合
特点:
1)存取无序
2)不可重复
3)无索引
Hash表:
加载因子:
当集合中的存储的元素数量>Hash表数量*加载因子,集合就要扩容
注意点:
如果未重写hashCode()方法,则在添加过程中,可以重复添加值相同的对象,因为系统返回的HashCode每次不一致
如果未重写equals()方法,则比较的是地址值,地址值相同的对象,可能值不同
存储顺序:
1)先根据对象计算出hashCode码
2)在Set集合中查询是否存在该hashCode,如果不存在,则直接存入,若存在,则进行第三步
3)若使用equals方法,比较值是否相等,若不相等,则存入,若相等,则不存入
主要实现类:
HashSet
特点:
数据结构:采用哈希表(属于散列表,JAVA有8种数据结构,散列表是其中一种),数组与链表的结合体
存取数据均比较快
线程不安全
LinkedHashSet
特点:
数据结构:基于链表的哈希表
与List区别:
去重原理:Set集合在存储数据的时候会调用hashCode()和equals()方法进行重复元素判断
A:hashCode和equals的面试题
/*
* 两个对象 Person p1 p2
* 问题: 如果两个对象的哈希值相同 p1.hashCode()==p2.hashCode()
* 两个对象的equals一定返回true吗 p1.equals(p2) 一定是true吗
* 正确答案:不一定
*
* 如果两个对象的equals方法返回true,p1.equals(p2)==true
* 两个对象的哈希值一定相同吗
* 正确答案: 一定
*/
阅读全文
0 0
- collection
- collection
- Collection
- collection
- collection
- collection
- Collection
- collection
- Collection
- Collection
- collection
- Collection
- Collection
- Collection
- Collection
- Collection
- collection
- Collection
- stl map
- J
- PAT乙级 1070. 结绳(25)--数学问题
- 使用webservice调用天气接口的简单应用
- jQuery 3.0新特性
- Collection
- CodeForces-185A(矩阵快速幂)
- exercise8
- Unity网络基础-Client
- 程序设计的思维
- 数据库总结(一)
- 【2017多校】HDU6035 Colorful Tree 【听说是树形DP】
- SSH错误'sessionFactory' or 'hibernateTemplate' is required
- hdu 6040 Hints of sd0061[2017 Multi-University Training Contest