反省不能new对象 必须指明是什么类型的
public class 类名<T>{
} //命名规则
public interface 类名<T>{
} //命名规则
public class A implements 类名<>
在实现得时候必须要指定告诉是什么
public void show(T t){}
提高代码重用性,可以避免使用多态,即方法重载
防止类型转换异常,提高代码安全性
各种集合形式在创建新对象时,方法其中有得,很多行成Object类型得对象,在后边输出对象时还要进行类型转换
不至于所有类型都可以往里边放造成问题
ArrayList<String> arrayList = new ArrayList<String>();
ArrayList<Integer> arrayList1 = new ArrayList<Integer>();
举个例子
ArrayList<Student> arrayList2 = new ArrayList<Student>();
迭代器也是泛型的。
ListIterator<Student> listIterator = arrayList2.listIterator();
Object nextElement = listIterator.next();
System.out.println(nextElement.toString());
比之前的少了一步强制类型转换
无序无下标元素不可重复,方法继承Collection
Set<String> set = new HashSet<>();
创建集合
增加数据也是add
删除 用remove 不能用角标删除
遍历 没啥特别的
1。可以使用增强for
2.使用迭代器
contains isEmpty
先基于HashCode值计算元素存储位置
在进行存入元素哈希码确认前边不存在已知的
存储结构,哈希表:数组+链表+红黑树
使用得方法跟之前学过的相似
在这边使用new Person(“梁朝伟”,25)相同的就可以加进去了,因为不同的数据地址
这里在针对重写equals上得重写是也重写hashCode
基于排序顺序实现不重复
红黑树:二叉查找树,有根节点,左边的放小的,右边的放大的
各个方法与上边的集合访问一样,增加 删除 遍历 判断
注意点
实现comparable接口
在增加对象时,若存在两个参数,因为他要比较实现自动排序,所以必须要规定一个可以作为参数的唯一标准
所增加对象的类中必须实现Comparable接口,否则出现以下情况
@Override
public int compareTo(Student o) {
int n2 = this.age - o.age;
return n2;
} //对于下边图片的接口继承的重写
继承Comparable以后没事了
使用Comparator,在创建数组时已经规定了比较规则
TreeSet<Student> hashSet1=new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int n2 = o1.age - o2.age;
return n2;
}
});
存储一对数据,可以重复,无序,无下标
Map<String, String> map = new HashMap<>();
map.put("1", "黄");
map.put("2", "黄2");
map.put("3", "黄3");
map.put("3", "黄3");
map.put("3", "黄");
但是后边的值如果相等,是可以的,但是后边的黄黄会把黄替换掉
map.put("3", "黄");
map.put("4", "黄黄");
map.remove("3");
//遍历数组,使用keySet,跟Map对象里边的get(s)
Set<String> keyset= map.keySet();
for (String s : keyset) {
System.out.println(s+map.get(s));
}
//遍历数组,使用Entry,getKey跟getValue
//Map.Entry,归这下边的一个子类
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey() + "------" + entry.getValue());
}
entrySet效率高
containsKey();
containsValue();
跟上边的TreeSet很像
//排序操作
Collections.sort(arrayList);
//查找二分查找binarySearch 在arrayList集合里能否找到2,找到就返回所在数组的下标
System.out.println(Collections.binarySearch(arrayList,1));
//赋值copy,因为赋值要求集合大小相同,所以只能如此
ArrayList<Integer> arrayList1 = new ArrayList<>();
for (int i = 0; i < arrayList.size(); i++) {
arrayList1.add(0);
}
Collections.copy(arrayList1,arrayList);
//反转reverse 打乱:shuffle
Collections.reverse(arrayList);
Collections.shuffle(arrayList);
//toArray 转换成数组toArray()
System.out.println(arrayList.toArray().length);
//数组变成集合,是一个受限几个,不能添加跟删除,因为大小已经限制了
//基本数据类型在转成集合时,需要把他转成引用类型
String[] strings = {
"张三","李四"};
List<String> arrayList2 = Arrays.asList(strings);