一道Java集合框架题!!!!!
来源:互联网 发布:域名防红工具 编辑:程序博客网 时间:2024/06/15 13:36
问题:某班30个学生的学号为20070301-20070330,全部选修了Java程序设计课程,给出所有同学的成绩(可用随机数产生,范围60-100),请编写程序将本班各位同学的成绩按照从高到低排序打印输出。
要求:分别用List、Map、Set来实现,打印的信息包括学号、姓名和成绩。
1、使用List集合来实现
对List集合框架的总结:
1、List集合其实是一个动态的数组,元素可以直接通过for循环取出,而不需要迭代。
2、输出List集合时,会默认调用集合中存储对象的toString()方法,所以在类中需要进行覆写。
若不覆写toString( )方法,则必须使用
3、List集合的排序需要借助于Collections工具类,即Collections.Sort(list,new 比较器类())方法。所以需要自定义一个比较器类,定义自己的比较规则。
2、使用Set集合来实现
(1)使用TreeSet来实现
输出结果为:
学号:20070307 姓名:同学16 成绩:60
学号:20070309 姓名:同学18 成绩:60
学号:20070314 姓名:同学23 成绩:61
学号:20070318 姓名:同学27 成绩:61
学号:20070322 姓名:同学31 成绩:61
学号:20070306 姓名:同学15 成绩:62
学号:20070310 姓名:同学19 成绩:64
学号:20070302 姓名:同学11 成绩:66
学号:20070308 姓名:同学17 成绩:68
学号:20070321 姓名:同学30 成绩:68
学号:20070330 姓名:同学39 成绩:69
学号:20070303 姓名:同学12 成绩:70
学号:20070320 姓名:同学29 成绩:70
学号:20070323 姓名:同学32 成绩:77
学号:20070313 姓名:同学22 成绩:78
学号:20070304 姓名:同学13 成绩:79
学号:20070324 姓名:同学33 成绩:83
学号:20070326 姓名:同学35 成绩:84
学号:20070327 姓名:同学36 成绩:85
学号:20070311 姓名:同学20 成绩:88
学号:20070305 姓名:同学14 成绩:89
学号:20070329 姓名:同学38 成绩:89
学号:20070316 姓名:同学25 成绩:90
学号:20070301 姓名:同学10 成绩:95
学号:20070312 姓名:同学21 成绩:96
学号:20070317 姓名:同学26 成绩:97
学号:20070319 姓名:同学28 成绩:97
学号:20070325 姓名:同学34 成绩:98
学号:20070315 姓名:同学24 成绩:99
学号:20070328 姓名:同学37 成绩:99
对TreeSet的总结:
1、元素不可以重复,而且TreeSet是有序的。
2、两种排序方法:
(1)自定义一个比较器类,比如class Com implementsComparator{ } ,实现compare(Object o1, Object o2)方法,在其中定义比较规则。
(2)让元素自身具备比较性。
步骤:将add进TreeSet中的元素实现Comparable接口,并且覆盖compareTo方法。这种顺序也是元素的自然顺序,或者叫做默认顺序。
方法1和方法2的区别:
两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码。
用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。
(2)使用HashSet来实现
输出结果如下:
学号:20070310姓名:同学19 成绩:60学号:20070330姓名:同学39 成绩:62
学号:20070326姓名:同学35 成绩:63
学号:20070317姓名:同学26 成绩:64
学号:20070318姓名:同学27 成绩:65
学号:20070322姓名:同学31 成绩:65
学号:20070301姓名:同学10 成绩:67
学号:20070328姓名:同学37 成绩:68
学号:20070304姓名:同学13 成绩:68
学号:20070319姓名:同学28 成绩:69
学号:20070313姓名:同学22 成绩:70
学号:20070303姓名:同学12 成绩:71
学号:20070312姓名:同学21 成绩:71
学号:20070329姓名:同学38 成绩:72
学号:20070306姓名:同学15 成绩:72
学号:20070324姓名:同学33 成绩:72
学号:20070305姓名:同学14 成绩:75
学号:20070315姓名:同学24 成绩:75
学号:20070314姓名:同学23 成绩:78
学号:20070307姓名:同学16 成绩:80
学号:20070311姓名:同学20 成绩:81
学号:20070302姓名:同学11 成绩:83
学号:20070309姓名:同学18 成绩:84
学号:20070320姓名:同学29 成绩:85
学号:20070321姓名:同学30 成绩:85
学号:20070316姓名:同学25 成绩:86
学号:20070327姓名:同学36 成绩:90
学号:20070308姓名:同学17 成绩:94
学号:20070323姓名:同学32 成绩:94
学号:20070325姓名:同学34 成绩:95
1、HashSet中的元素不可以重复,如果重复添加,则只会显示一个。
原理如下:
HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
2、HashSet是如何保证元素唯一性的呢?
答:是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。如果元素的hashcode值不同,不会调用equals。
3、对HashSet的排序,通过将Set集合转化为List集合,借助Collections.Sort( )方法实现排序。
3、使用TreeMap来实现
输出结果为:
学号:20070307 姓名:同学16 成绩:60
学号:20070313 姓名:同学22 成绩:61
学号:20070314 姓名:同学23 成绩:63
学号:20070304 姓名:同学13 成绩:64
学号:20070311 姓名:同学20 成绩:66
学号:20070309 姓名:同学18 成绩:67
学号:20070320 姓名:同学29 成绩:68
学号:20070330 姓名:同学39 成绩:70
学号:20070312 姓名:同学21 成绩:72
学号:20070326 姓名:同学35 成绩:78
学号:20070323 姓名:同学32 成绩:80
学号:20070321 姓名:同学30 成绩:82
学号:20070324 姓名:同学33 成绩:83
学号:20070318 姓名:同学27 成绩:85
学号:20070325 姓名:同学34 成绩:86
学号:20070329 姓名:同学38 成绩:88
学号:20070303 姓名:同学12 成绩:89
学号:20070317 姓名:同学26 成绩:90
学号:20070308 姓名:同学17 成绩:91
学号:20070327 姓名:同学36 成绩:95
学号:20070328 姓名:同学37 成绩:96
学号:20070316 姓名:同学25 成绩:97
学号:20070302 姓名:同学11 成绩:98
学号:20070315 姓名:同学24 成绩:99
对TreeMap的总结:
1、TreeMap默认对key进行排序,所以可将成绩放入key中,将其他属性放入value中。
2、Map集合使用put()方法添加元素。
3、Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
map集合的两种取出方式:
(1)Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
(2)Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry
- 一道Java集合框架题
- 一道Java集合框架题!!!!!
- 一道Java集合框架题 多种解题思路
- Java集合:集合框架
- 【Java】java集合框架
- [Java]Java集合框架
- JAVA集合框架和集合
- 【集合】Java集合框架介绍
- Java集合之集合框架
- [集合]Java的集合框架 Collection集合
- Java集合框架22课后编程题
- Java集合框架 (一)
- Java集合框架 (二)
- Java集合框架(三)
- Java集合框架
- 也来谈Java集合框架
- 也来谈Java集合框架
- Java集合框架 (一)
- 列间距column-gap
- Java 堆内存和栈内存
- The differences between define and typedef
- com.google.gson.stream.MalformedJson Expected literal value at line 1 column 28
- 列表边框column-rule
- 一道Java集合框架题!!!!!
- Lucene 学习资料
- shrink_page_list 函数分析
- android 安全机制验证机制总结(就本人目前的水平进行总结,记录以方便以后提高补充)
- 排序算法汇总
- 导布局ID的神Convert Layout XML to Java
- 获取json对象的长度
- Android中Notification通知的实现
- nginx中alias和root区别