一.泛型
1)泛型类是具有泛型变量的类,在类名后用代表引用类型,如ArrayList,HashMap,HashSet;
//ArrayList部分源码
public class ArrayList<E> extends AbstractList<E>
implements List<E>,RandomAccess,Cloneable,java.io.Serializable{
public E get(int index){}
}
2)泛型方法是具有泛型参数的方法,可以在普通类或泛型类中,定义的泛型在修饰符后,返回类型前。
public class ArrayUtil{
public static<T> T getMiddle(T... a){
return a;
}
如何调用泛型类
Interval<Integer> v = new Interval<Integer>();
Interval<Integer> v = new Interval<>();//后面的可以省略
3)泛型方法是与泛型类相似,在类名后加,实现接口时,指定类型。
public class IntegerCalculator implements Calculator<Integer>{
public Integer add(Integer operand1,Integer Toperand2){
return operand1 + operand2;
}
IntegerCalculator a = new IntegerCalculator();
Calulator<Integer> c = new IntegerCalculator();//用泛型接口声明对象时
二.集合
1)集合与数组最大的区别就是:集合可以存储不同种类的数据,而数组相反。
2)集合框架
3)集合的特殊性
(1)集合存储的长度可变。
(2)集合只能存储对象,(因为集合实际上存储的是对象的引用值,也就是在堆中的地址)。基本数据类型是存在站里边的,所以不能存放基本数据类型必须经过包装类才可以存储。
1.Collection接口
Collection和Map,这两种都在Java.util包下.
Collection是除Map外所有其他集合类的根接口.
Collection接口提供了2个子接口,List接口和Set接口
----------------------------------------------Collection的常用方法:
添加功能:
* boolean add(Object e):添加任意对象
* E get(int index) : 返回指定索引处的元素(接收,输出)
* 删除功能:
* void clear():移除所有元素
* boolean remove(Object o):删除一个元素
------------------------------------------------------------
* 判断功能:
* boolean contains(Object o):判断集合中是否包含某个对象
* boolean isEmpty():判断集合是否为空
E set(int index.E e):根据索引将元素数组值改变(替换)
------------------------------------------------------------
* 获取功能:
* int size():获取集合的长度
* 数组长度:length 字符串长度:length()
------------------------------------------------------------
*Object[] toArray():集合转为Object数组
------------------------------------------------------------
Int indexOf(E e):返回在此集合中指定元素第一次出现的索引
Int lastIndex(E e):返回集合中指定元素最后一次出现的索引
------------------------------------------------------------
* boolean addAll(Collection c):添加一个集合的元素
* boolean removeAll(Collection c):删除两个集合中相同的元素
* boolean containsAll(Collection c):判断集合中是否包含另一个集合中的所有元素
* boolean retainAll(Collection c):将两个集合中重复的元素保留,如果集合改变返回true,不改变返回false
------------------------------------------------------------
*Iterator iterator():迭代器遍历集合;
2. List接口
(1)List接口继承自Collection接口,它规定实现它的类存储的是有序的,不唯一的集合元素,同时提供了具体的实现类ArrayList和LinkedList
(2)ArrayList:数组形成,连续的存储空间,查询速度快,增删速度慢
(3)LinkedList:双向链表,不连续的存储空间,增删速度快,查询速度慢
1) ArrayList类
(1)ArrayList类实现了List接口,是基于动态数组的类,可存储null值.
(2)(具体时间类)ArrayList创建:
(3)创建 List<String> nameList = new ArrayList<String>();
2) LinkedList类
(1)LinkedList类实现了List接口,是基于双向链表的类可存储null值.
(2)LinkedLit创建方式.
LinkedList <String>LinkedList =new LinkedList <sting>();
(3)LinkedList常用方法:
Void addFirst(E e)将指定元素添加至此集合的开头
Void addList(E e)将指定元春添加到此集合的末尾
E gefFirst ( )返回此集合的第一个元素
E getlast ()返回此集合的最后一个元素
E removeFirst( )删除此集合中第一个元素
E removelast ( )删除此集合中的最后一个元素
(4)LinkedList遍历集合中的元素:
①普通的for循环 ②用foreach循环 ③用迭代器
3. Set接口
1.Set接口继承自Collection接口,它存储的是无序的、唯一的集合元素
2.HashSet类实现了set接口,是基于HashMap实现,存储不重复,无序值
3.HashSet是根据对象的哈希值来确定元素在集合中的存储位置的元素在插入时就确定了存储位置,因此 :
①元素在集合中存储的位置是固定的.(无序是指输出顺序与存储顺序不一致),
②具有良好的存储和查找性能(存储速度快),
③保证元素的唯一依赖于HashCode方法和equals方法。
1)Hashset类
1.HashSet创建方式:
HashSet<String> set = new HashSet<String>();
2.HashSet常用方法:
boolean add(E e):向集合中添加元素
Int size():获取此集合的长度
Boolean remove(E e):删除集合中第一个出现的指定元素
4. Map接口
1.Map接口是一个根接口,它存储的是键值(key-value),其中key不允许重复value允许重复。
2.hashmap类实现了map接口存储的是无序的键-值对(key-value)
(1)HashMap的key是用来set集合来存放的,所以想做到key不允许重复,key对应的类需要重写hashcode和equals方法。
(2)HashMap是线程不安全的
(3)HashMap中元素的位置是不定时更新的,即元素位置是不固定的
3.HasMap类创建方式:
HashMap<String,String> map = new HashMap<String,String>();
尖括号里面存储的类,就是集合里面所要存储的类型
4.Map的常用方法:
V put(K key,V value)将指定的键与之关联的值存入HashMap中
V get(K key)获取指定键所关联的值 通过K找V
V remove(K key)删除
------------------------------------------------------------Map接口中的方法:
* 添加功能:
* V put(K key, V value):当键第一次存储返回null,接下来每一次存储返回上一次的值。
------------------------------------------------------------
* 删除功能:
* void clear()
* V remove(Object key):根据键删除键值对,返回值。
------------------------------------------------------------
* 获取功能:
* Set<Map.Entry<K,V>> entrySet():得到的是每一组键值对,存放在一个Set集合中。
* Set<K> keySet():得到所有的键
* Collection<V> values():得到所有的值
* V get(Object key):根据键得到值。
* int size():获取集合中总共几对元素。
------------------------------------------------------------
* 判断功能:
* boolean containsKey(Object key):是否包含指定的key
* boolean containsValue(Object value):是否包含指定的value
* boolean isEmpty():集合是否为空
5.HashMap的遍历方式:
* 1.得到所有的键存放在Set集合中 -- keySet()
* 2.遍历键所在的集合,得到每一个键
* 3.通过当前的键得到对应的值
语法:
Set<泛型> keys = 集合名.keySet();
for(泛型 key: keys){
值的数据类型 value = 集合名.get(key);
}
1)HashMap类
注:使用HashMap集合存储键值对,自定义对象作为键,需要在类中覆盖hashCode()和equals()方法。
HashMap和Hashtable的区别?
* HashMap可以存储null键和null值,线程不安全,效率高
* Hashtable不可以存储null键和null值,线程安全,效率低