Java学习_20220614
作者:互联网
Java集合框架
一、泛型
1.泛型方法
在泛型方法中不用传递参数类型,类型是由调用的泛型方法的数据来传递。
/**
*泛型方法,语法:<T>返回值类型
*/
public class GenericMethod {
public <T> void show(T t){
System.out.println("泛型方法:"+t);
}
}
//调用泛型方法
GenericMethod genericMethod = new GenericMethod();
genericMethod.show("这是String类型的!");
genericMethod.show(1080);
genericMethod.show(3.1415);
2.泛型集合
ArrayList arrayList = new ArrayList();
arrayList.add("CCC");
arrayList.add("XXX");
arrayList.add(123);
arrayList.add(456);
/*
for(Object ob : arrayList){
System.out.println(ob);
}
*/
for(Object ob : arrayList){
String st = (String)ob; //强制类型转换时要看数据类型
System.out.println(st); //只能输出String类型的,int类型无法输出
}
使用泛型集合
ArrayList<String> arrayList1 = new ArrayList();
arrayList1.add("www");
arrayList1.add("qqq");
//arrayList1.add(123); 出错,arrayList1数据类型为String
for(String string : arrayList1){
System.out.println(string);
}
二、Set子接口
特点:无序、无下标、元素不可重复......继承Collections方法
Set实现类:
1、HashSet:基于HashCode实现元素不重复;当存入元素的哈希码相同时,会调用equals进行确认,结果为true,则拒绝后者存入。
Set<String> set = new HashSet<>();
//添加add(只能为String类型),删除(remove),遍历(for、增强for、迭代(泛型))、判断都与Conllections一致
HashSet存储结构:哈希表(数组+链表+红黑树)
在没有重写hashCode和equals方法之前可以添加进去,认为是空对象名数据。
存储过程:
(1)根据hashcode计算保存的位置,如果此位置为空,则直接保存,如果不为空执行第二步;
(2)再执行equals方法,如果equals方法为true,则认为是重复,否则,形成链表。
//可按alt+insert自动重写
@Override
public int hashCode() {
int n1 = this.name.hashCode();
int n2 = this.ages;
return n1+n2;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null )
return false;
if(obj instanceof Person){
Person p = (Person) obj;
if(this.name.equals(p.getName())&&this.ages==p.getAges()){
return true;
}
}
return false;
}
}
2.TreeSet:基于排列顺序实现元素不重复,实现了SortedSet接口,对集合元素自动排序,元素对象的类型必须实现Comparable接口,指定排序规则。通过CompareTo方法确定是否为重复元素。
TreeSet保存数据,存储结构为红黑树,元素必须要实现Comparable接口,否则无法将元素添加到TreeSet中,compareTo()方法返回值为0,认为是重复元素。
TreeSet<Object> treeSet = new TreeSet<>();
public class Person implements Comparable<Person>{
//先按姓名比后按年龄比
@Override
public int compareTo(Person person) {
int n1 = this.getName().compareTo(person.getName());
int n2 = this.ages-person.getAges();
return n1==0 ? n2:n1;
}
}
Comparator:实现定制比较(比较器),在创建treeset实例时,使用带comparator参数的方法,不需要再到实例类中实现Comparable接口.
/**
* 要求:使用TreeSet集合实现字符串按照长度进行排序
* helloworld zhangsan xian wuhang beijing shanghai yunnan
*/
public class TreeSet_test {
public static void main(String[] args) {
//创建集合,并指定比较规则
TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String s, String t1) {
int n1 = s.length()-t1.length();
int n2 = s.compareTo(t1);
return n1==0?n2:n1;
}
});
//添加数据
treeSet.add("helloworld");
treeSet.add("zhangsan");
treeSet.add("xian");
treeSet.add("wuhang");
treeSet.add("beijing");
treeSet.add("shanghai");
treeSet.add("yunnan");
System.out.println(treeSet.toString());
}
}
标签:Java,String,int,20220614,学习,add,泛型,public,treeSet 来源: https://www.cnblogs.com/Joyce-mi7/p/16375908.html