泛型
1、泛型:确定集合中只能存放某一种数据类型对象。//<String>
2、泛型的好处:
1.将运行时的错误提前到编译时。
2.避免无谓的强制类型转换
3、自定义泛型:自定义泛型就是一个数据类型的占位或一个数据类型变量,一般T或E来做这儿占位符号
格式:<占位符> T :定义了一个泛型
Public static 数据类型
Eg:public static <T>T text(T s){
Rerurn s ;
}
如果你传进去的是基本数据类型:接受的时候已改用它的包装来来接受
Eg:int ---->Integer;
Short =--->Short;
Double---->Doblie
Float0------>Float
Byte------>Byte
Boolean---->Boolean
Long----->Long
Char----->Charactor
4、使用注意点:
1.泛型方法中自定一个泛型数据的类型是在在实际参数传递被确定的
2.泛型所用的标识符需要符合标识符的命名规范,一般习惯用大写字母表示
5、自定义数组的工具类
定义一个泛型类
格式:class 类名<声明自定义的泛型>{}
使用注意点:
1.泛型类上自定义的自定义泛型的类型是在创建这个对象时确定的
2.如果一个定义泛型的类,在创建对象时没有指定,默认为object类型。
3.静态方法是不能够使用类上自定义的泛型,必须在方法上定义一个泛型
6、泛型接口的定义方式:
Interface 接口名<声明自定义的泛型>{ }
使用注意点:
1.接口上自定义的泛型在实现该接口的时候被指定的
2.如果实现接口是没有指定接口,那么就会默认为object
需要在创建接口实现类对象是指定数据类型,那么需要格式:
class 类名 <声明自定义泛型> implements 接口<声明自定义泛型>
7、判断下面泛型写法是否正确
ArrayList<string> list1 = new ArrayList<string>(); true
ArrayList<string> list2 = new ArrayList<Integer>(); false
ArrayList<Integer> list3 = new ArrayList<string>(); false
//jdk1.5有的
ArrayList list4 = new ArrayList<string>(); true
ArrayList<string> list5 = new ArrayList(); true
8、map 集合 接口 双列集合
特点:存储数据是以键和值的方式,键不允许重复,值是允许重复的。
----->HashMap
----->TreeMap
----->HashTable
Map中常用的方法:
添加:put(K key, V value)
PutAll(Map<? Extends K,? Extends V>m)
删除:clear()
Remove(object key)
获取:get(object key)
Size()
判断:isEmpty()
containsKey(object key)
containsValue(object value)
9、map集合的使用注意点:
1.键可以是任意对象,值也可以是任意对象
2.Map集合中是可以嵌套存list(Map)集合
10、HashMap:底层给予哈希表
存储原理也使用哈希表来存放的:
往HashMap添加了元素,首先会调用键的HashCode方法获得一个哈希值,然后经过运算获取一个位置。
情况一,如果位置上没有元素,那么直接将该元素存放在此位置。
情况二,如果位置上有了元素,那么还会调用元素equals方法与这个位置的元素做比较,如果返回回来的true,那么就被视为相同的键,就不存,如果返回回来时是false,那么就可以存该元素。
11、TreeMap
给予二叉树的结构存储。特点:以键来做自然排序
使用注意点:
1.往TreeMap添加的元素时,如果元素的键具备自然排序功能,那么久会通过自然排序对元素进行排序。
2.往TreeMap添加的元素时,如果不具备自然排序特性,键所属的类必须要实现Comparable接口。把这个键的比较规则定义在Comparable方法中
3.往TreeMap添加的元素时,如果不具备自然排序特性,也没有实现Comparable接口,创建TreeMap的时候给他一个比较器结构:
Class 类名 implements Comparable 接口{
}
键的比较规则定义在Comparable方法中。
12、HashTable :HashMap一样的使用,线程安全,访问比较慢
13、Map集合的遍历方式:
迭代器来遍历
①entrySet();
Eg:特点 : 通过遍历键 ,通过键来取值
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.next();
System.out.println("键"+key +":值"+map.get(key));
}
②keySet();
Eg:map集合遍历方式二: values(); 获取map集合中所有的值,用Collection集合来保存
Collection<String> coll = map.values();
//创建一个迭代器
Iterator<String> it = coll.iterator();
while(it.hasNext()){
System.out.println("值:"+it.next());
}
③values();
Eg:map集合的遍历方式三:entrySet();
Set<Map.Entry<String, String>> entrys = map.entrySet();
//获取迭代器
Iterator<Map.Entry<String, String>> it = entrys.iterator();
while(it.hasNext()){
Map.Entry<String, String> entry = it.next();
//需求将小达达换成老王
String key = entry.getKey();
if(("付建华").equals(key)){
entry.setValue("老王");
}
System.out.println("键:"+entry.getKey() + " 值:"+entry.getValue());
}
14、Collection:接口
Collections:集合的工具类 Arrays(数组的工具类)只能操作list集合
15、Collection和Collections的区别?
Collection是一个单列集合的跟接口,Collections是操作集合的工具类。
Collections常用方法:
1.对list进行二分查找:
前提该集合一定要有序。
int binarySearch(list,key);
//必须根据元素自然顺序对列表进行升级排序
//要求list 集合中的元素都是Comparable 的子类。
int binarySearch(list,key,Comparator);
2,对list集合进行排序。
sort(list);
//对list进行排序,其实使用的事list容器中的对象的compareTo方法
sort(list,comaprator);
//按照指定比较器进行排序
3,对集合取最大值或者最小值。
max(Collection)
max(Collection,comparator)
min(Collection)
min(Collection,comparator)
4,对list集合进行反转。
reverse(list);
5,对比较方式进行强行逆转。
Comparator reverseOrder();
Comparator reverseOrder(Comparator);
6,对list集合中的元素进行位置的置换。
swap(list,x,y);
7,对list集合进行元素的替换。如果被替换的元素不存在,那么原集合不变。
replaceAll(list,old,new);
8,可以将不同步的集合变成同步的集合。
Set synchronizedSet(Set<T> s)
Map synchronizedMap(Map<K,V> m)
List synchronizedList(List<T> list)
9. 如果想要将集合变数组:
可以使用Collection 中的toArray 方法。注意:是Collection不是Collections工具类
传入指定的类型数组即可,该数组的长度最好为集合的size。
浙公网安备 33010602011771号