网站建设的自查整改报告,温州网站排名团队,百度指数有什么参考意义,工业产品设计专业文章目录 1.treeset结构2.treemap结构3.集合去重辨析总结4.对于arraylist的练习题目5.对于HashMap的练习题目6.第三点的去重运用7.HashSe练习题目 1.treeset结构
下面的这个就是对于这个treeset结构进行测试的一个程序#xff0c;在这个里面#xff0c;add表示的就是对于这个… 文章目录 1.treeset结构2.treemap结构3.集合去重辨析总结4.对于arraylist的练习题目5.对于HashMap的练习题目6.第三点的去重运用7.HashSe练习题目 1.treeset结构
下面的这个就是对于这个treeset结构进行测试的一个程序在这个里面add表示的就是对于这个树上面进行元素的添加打印的结果也是无序的 我们之前进行这个集合选型介绍的时候说过这个tree结构可以对于这个数据进行排序操作这个想要实现排序的效果需要我们自己手动传递进去一个比较器我们上面的这个就是传递的一个匿名内部类在这个匿名内部类里面我们对于这个比较的规则进行了说明上面的这个是return两个转换为这个string之后的长度相减因此这个输出的结果就是按照长度进行排序的
如果我们写成这个return (string) o1.compareTo((string) o2)这也写的话就是按照这个字典序进行比较的输出的结果也是我们的字母序的方式
2.treemap结构
treemap是一个k-v的形式我们想要实现这个排序的效果也是需要对于这个里面的new对象的时候添加比较器的我们下面的这个就是根据这个字典序进行比较我们也可以根据上面的这个字符串的长度进行比较也是可以的只需要在这个对应的内部类里面进行修改就可以了 下面的这个就是我们的源码里面具体是插入数据的过程为什么这个不可以插入相同数据主要就是我们的这个cmp是这个比较的返回值当插入的这个key和这个已有的key一样的时候就会cmp返回0这样进行下面的这个分支判断的时候就会进入这个else里面去进而直接返回这个就是插入相同内容不会打印的原因
/** if (cpr ! null) {* do {//下面的这个就是不断地进行遍历* parent t;* //这个地方主要就是根据这个compare方法决定的* //进行下面的这个比较0的时候就会直接进入else,直接return操作* //主要是我们的main方法里面的这个compare方法是如何实现的* cmp cpr.compare(key, t.key);* //下面的这个就是不断的寻找位置的过程* if (cmp 0)* t t.left;* else if (cmp 0)* t t.right;* else {* V oldValue t.value;* if (replaceOld || oldValue null) {* t.value value;* }* return oldValue;* }* } while (t ! null);* 上面第一次添加传进去的是两个一样的key但是这个返回值不会被我们接受* 这个主要是为了判断我们的这个数组是不是空的如果是空的这个compare方法* 里面就会抛异常*/3.集合去重辨析总结
1.hashset和treeset是如何实现去重的
hashset:使用的就是我们的hashcode()方法和这个equals()方法首先使用这个hashcode()方法计算这个数据在数组里面插入到的位置的索引也就是数组的下标然后使用这个equals()方法但是前提是这个位置有数据如果这个数组对应的下标没有数据这个时候就可以直接插入数据但是如果有数据我们需要使用这个equals方法判断我们插入的数据和已有的数据内容或者是属性这个比较是程序员进行重写的不是固定的是不是一样的如果不是一样的就可以进行挂载链表需要对于这个链表进行遍历–也就是一个一个的进行比较否则无法进行插入这个就是去重
treeset:如果我们传递这个compaartor匿名对象这篇文章的第二点就是这个场景的就是用实现的这个compare方法进行去重我们自己设计根据内容或者是长度或者是其他的使用的这个compare方法如果返回的是0说明是相同的元素或者是数据这个时候就不会被添加
如果没有传递comparator对象则以我们添加对象实现的comparable接口的compareTo方法string.java文件进行去重字符串的compareTo方法就是比较的内容
string实现comparable接口
4.对于arraylist的练习题目 import java.util.ArrayList;
//这个主要是为了一直报警信息~~
SuppressWarnings({all})
public class test {public static void main(String[] args) {//new出来一个arraylisy列表ArrayList arrayList new ArrayList();//向这个列表里面添加内容每一个内容都是一个新闻arrayList.add(new News(第一个新闻的主要的内容就是今天的天气很好主要的内容就是今天的天气很好));arrayList.add(new News(第二个新闻的主要的内容就是今天的天气很不不不不好主要的内容就是今天的天气很好不));//对于这个新闻内容进行遍历使用这个size方法对于这个过程进行控制int sizearrayList.size();for(int isize-1;i0;i--){//System.out.println(arrayList.get(i));//下面的这个是先得到我们的这个新闻对象然后进行类型转换//这个主要是因为我们的这个get得到的列表类型的数据需要转换为我们的自定义类型的对象News news (News)arrayList.get(i);//下面的这个就是调用我们的成员方法对于这个新闻标题进行处理System.out.println(processTitle(news.getTitle()));}}//下面的这个就是对于我们的这个新闻的长度进行处理如果大于15我们就会调用这个sustring方法对于这个超出的部分使用...进行表示public static String processTitle(String title){if(titlenull){return ;}if(title.length()15){return title.substring(0,15).........;}else{return title;}}
}
SuppressWarnings({all})
class News{private String content;private String title;
//根据题目的要求只写一个参数进行构造public News(String title) {this.title title;}
//下面的这个JavaBean都是根据我们的程序员变量自动生成的public String getContent() {return content;}public void setContent(String content) {this.content content;}public String getTitle() {return title;}public void setTitle(String title) {this.title title;}
//根据题目的要求重写这个里面的toString方法Overridepublic String toString() {return News{ title title \ };}
}5.对于HashMap的练习题目 package demo1;import java.util.*;SuppressWarnings({all})
public class test {public static void main(String[] args) {//题目说了需要我们使用这个Map类型的对象但是我的是使用Map类型的map代替了题目里面的这个m对象就是换了名字Map map new HashMap();//使用add方法往这个里面去添加元素map.put(jack,650);map.put(tom,1200);map.put(smith,2900);System.out.println(变化前的情况);System.out.println(map);//我们插入相同的key但是不同的value就可以达到替换的效果System.out.println(替换为2600之后的情况);map.put(jack,2600);System.out.println(map);Set set map.keySet();for (Object key : set) {//这个地方需要进行向下转型map.put(key,(Integer)map.get(key)100);}System.out.println(薪水加上100之后的情况);System.out.println(map);System.out.println(迭代器while循环遍历员工);//entryset里面的每一个数据都是这个entryk,v这样的Set entryset map.entrySet();Iterator iterator entryset.iterator();while (iterator.hasNext()) {Map.Entry entry (Map.Entry)iterator.next();System.out.println(entry.getKey()-entry.getValue());}System.out.println(工资);//得到每一组元素里面的value并且打印输出Collection values map.values();for (Object value : values) {System.out.println(value);}}
}6.第三点的去重运用
这个下面的案例算是对于上面的这个第三点的一个去重机制的一个运用吧可能会帮助我们对于这个去重的原理更好的理解包括这个里面用到的方法
这个其实是一个题目让我们进行判断这个代码会不会报错这个就是创建了一个treeset然后往这个里面去进行数据的添加但是这个会报错 其实这个主要原因就是我们的这个里面没有实现comparable接口我们可以添加这个string对象进行调试查看这个报错的位置就是下面的这个1569行因为这个需要被转换为comparable接口进而调用这个里面的compareTo方法进行比较 我们的string是常用类默认是实现了这个方法的因此我们把这个new Person换成string字符串都不会报错因为这个string就实现了我们的这个comparable接口里面也是有这个方法的但是我们自定义的这个类person没有实现这个接口也没有这个方法
我们的修改方法就是在这个Person类里面去实现这个接口重写这个compareTo方法这样的话因为return 0因此我们的这个set里面只能添加一个数据根据这个去重的规则返回0说明每一次进行比较的时候都是一样的肯定就添加不进去了 7.HashSe练习题目 第一次我们的print:2个对象
第二次我们的print3个对象
第三次我们的print:4个对象
第一次第二次添加就是正常的但是接下来对于这个p1.name进行了修改为CC但是这个时候删除p1是无法成功的因为根据我们的这个1011和CC会重新计算这个索引和原来的位置肯定是不一样的因此我们无法成功删除
第二次添加这个这个1001和CC貌似和原来冲了但是我们的这个索引一定和原来的不一样因为原来的是根据这个1011和AA计算出来的只不过后面修改为这个CC了但是我们的这个是使用1011和CC计算的索引肯定和他不一样因此可以插入这个时候打印就是3个对象
第三次添加这个1011,和AA和第一次的这个位置一样但是第一次的这个已经改为这个CC了因此我们可以添加挂载在1011,和CC的这个后面像链表一样串联起来~~ 法成功删除
第二次添加这个这个1001和CC貌似和原来冲了但是我们的这个索引一定和原来的不一样因为原来的是根据这个1011和AA计算出来的只不过后面修改为这个CC了但是我们的这个是使用1011和CC计算的索引肯定和他不一样因此可以插入这个时候打印就是3个对象
第三次添加这个1011,和AA和第一次的这个位置一样但是第一次的这个已经改为这个CC了因此我们可以添加挂载在1011,和CC的这个后面像链表一样串联起来~~