www.2527.com_澳门新葡8455手机版_新京葡娱乐场网址_
做最好的网站

实施练习题

2019-08-17 03:46 来源:未知

集合 List和Set,集合ListSet

分别向Set群集以及List会集中增多“A”,“a”,“c”,“C”,“a”5个要素,观望重复值“a”能不可能在List集结以及Set集结中中标增多。

 1         List<String> ls=new ArrayList<>();
 2         Set<String> ss=new HashSet<>();
 3         ls.add("A");
 4         ls.add("a");
 5         ls.add("c");
 6         ls.add("C");
 7         if(ls.add("a")){
 8             System.out.println("List集合中 'a' 添加成功。");
 9         }else{
10             System.out.println("List集合中 'a' 添加失败。");
11         }
12         
13         ss.add("A");
14         ss.add("a");
15         ss.add("c");
16         ss.add("C");
17         if(ss.add("a")){
18             System.out.println("Set集合中 'a' 添加成功。");
19         }else{
20             System.out.println("Set集合中 'a' 添加失败。");
21         }

运行:

www.2527.com 1

List和Set,会集ListSet 分别向Set集结以及List集结中增多A,a,c,C,a5个成分,观重视复值a能或不可能在List集合以及Set集结中成功增多。 1 ListString...

分级向Set集结以及List集结中增添“A”,“a”,“c”,“C”,“a”5个因素,观察重复值“a”能不可能在List集结以及Set会集中打响增添。

1.1. java.util包中提供了有个别集结类,那些群集类又被称呼容器。

 1         List<String> ls=new ArrayList<>();
 2         Set<String> ss=new HashSet<>();
 3         ls.add("A");
 4         ls.add("a");
 5         ls.add("c");
 6         ls.add("C");
 7         if(ls.add("a")){
 8             System.out.println("List集合中 'a' 添加成功。");
 9         }else{
10             System.out.println("List集合中 'a' 添加失败。");
11         }
12         
13         ss.add("A");
14         ss.add("a");
15         ss.add("c");
16         ss.add("C");
17         if(ss.add("a")){
18             System.out.println("Set集合中 'a' 添加成功。");
19         }else{
20             System.out.println("Set集合中 'a' 添加失败。");
21         }

1.2. 关于容器,集合类与数组的不相同之处:

运行:

  • 数组的尺寸是固定的,集合的长度是可变的;
  • 数组用来存放基本类型的数据,群集用来存放对象的引用

www.2527.com 2

1.3. 常用的会师有List会集、Set集结和Map群集; List与Set承袭了Collection接口各接口还提供了不同的实现类。常用集结类的持续关系如下:

www.2527.com 3

  • Collection接口是档案的次序结构中的根接口;
  • 组合Collection的单位称为元素
  • Collection接口平时不可能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法。
  • 是因为List接口与Set接口都持续了Collection接口,因而这么些办法对List群集与Set集结是通用的。

    常用方法如下表:www.2527.com 4

上面是二个归纳实例,把表中的法子都用贰遍:

(Ps:

  • iterator迭代器有一些儿像叁个指针同样的东西,指向list对象中的某贰个要素;
  • it.hasNext()中迭代器的hasNext()第壹次用的时候,指向第七个成分,next
package com.lzw;import java.util.*;public class Muster { // 创建类Muster public static void main(String args[]) { Collection<String> list = new ArrayList<>(); // 实例化集合类对象 list.add; // 向集合添加数据 list.add; list.add; list.add; list.add; System.out.println("Now add a&b&c&d&e to the list , its size is:" list.size; System.out.println("Print out all element of the list:"); Iterator<String> it = list.iterator(); // 创建迭代器 while (it.hasNext { // 判断是否有下一个元素 String str =  it.next(); // 获取集合中元素 System.out.println; } System.out.println("------------------------------------------------"); list.remove; list.remove; list.remove; System.out.println("Now remove a&b&c of the list , its size is:" list.size; System.out.println("Print out all element of the list:"); Iterator<String> it1 = list.iterator(); while(it1.hasNext{ String str = it1.next(); System.out.println; } System.out.println("Now is the list Empty? " list.isEmpty; System.out.println("------------------------------------------------"); list.remove; list.remove; System.out.println("Now remove d&e of the list , its size is:" list.size; System.out.println("Now is the list Empty? " list.isEmpty; }}

出口结果:

Now add a&b&c&d&e to the list , its size is:5Print out all element of the list:abcde------------------------------------------------Now remove a&b&c of the list , its size is:2Print out all element of the list:deNow is the list Empty? false------------------------------------------------Now remove d&e of the list , its size is:0Now is the list Empty? true
  • List集结包罗List接口以及接口的所有实现类
  • List集结中的元素允许重复,各要素的顺序即便对象插入的顺序
  • 恍如Java数组,用户可通过使用索引(元素在集合中的位置)来拜谒群集中的成分。
3.1 List接口

List接口承接了Collection接口,因而包括Collection中的全部办法。

其余,List接口还定义了以下多个可怜重大的艺术:get(int index):获得内定索引地点的成分;set(int index,Object obj):将集聚中钦赐索引地点的指标修改为内定的靶子。

3.2 List接口的贯彻类

List接口的常用完毕类有ArrayListLinkedList.

ArrayList类a. 实现了可变的数组,允许保存所有元素,包括null,并得以依附目录地点对集中进行高效的任意访谈;b. 劣势是向内定的目录地点插入对象或删除对象的速度非常的慢。

LinkedList类a.采用链表结构保存对象。b.优点是方便人民群众向聚集中插入和删除对象,需求向聚集中插入、删除对象时,使用LinkedList类完成的List集结的效用较高:c. 但对于随机访问集合中的对象,使用LinkedList类达成List集合的频率很低。

动用List集结时经常声明为List类型,可通过不同的实现类实例化集结。分别通过ArrayListLinkedList类实例化List集合,代码如下:

List<E> list = new ArrayList<>();List<E> list2 = new LinkedList<>();

在上头的代码中,E能够是合法的Java数据类型。比如,假诺集结中的成分为字符串类型,那么E能够修改为String

上面是二个归纳实例:

import java.util.*;public class Gather { // 创建类Gather public static void main(String[] args) { // 主方法 List<String> list = new ArrayList<>(); // 创建集合对象 list.add; // 向集合添加元素 list.add; list.add; list.add; list.add; int i =  (Math.random() * (list.size; // 获得0~4之间的随机数 System.out.println("随机获取数组中的元素:"   list.get; list.remove; // 将指定索引位置的元素从集合中移除 System.out.println("将索引是'2'的元素从数组移除后,数组中的元素是:"); for (int j = 0; j < list.size { // 循环遍历集合 System.out.println(list.get; } }}

输出结果:

随机获取数组中的元素:c将索引是'2'的元素从数组移除后,数组中的元素是:abde
  • Set群集中的对象不按特定的方式排序,只是简单地把对象加入集合中
  • Set集合中不能包含重复对象
  • Set集合由Set接口Set接口的实现类组成。
  • Set接口承继了Collection接口,由此富含Collection接口的所有方法

Set接口常用的兑现类有HashSet类TreeSet类www.2527.com,。

HashSet类a. 实现Set接口,由哈希表(实际上是一个HashMap实例)支持。b. 它不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。c .此类允许使用null元素

TreeSet类a. 不只有落成了Set接口,还落实了java.util.SortedSet接口,b. 由此,TreeSet类达成的Set集合在遍历集合时按照自然顺序递增排序*********%%%%%%%%%%***********c. 也能够依据钦定比较器递增排序;d. 即能够透过比较器对用TreeSet类达成的Set集结中的对象开展排序。TreeSet类新扩展的艺术如下表:

www.2527.com 5www.2527.com 6www.2527.com 7

几个须要小心的地点:

  • compareTo()办法中书写的剧情就是TreeSet类达成的Set群集在遍历集合时自然顺序递增排序的依据;
  • 使用compareTo()艺术的前提是要让使用的类达成Comparable接口
  • Set顺序遍历时,依附compareTo()主意中书写的条条框框实行自然顺序递增排序,而非add()的顺序;
  • headSet()/subSet()/tailSet()四个措施再截取时,所谓的“以前、之后、之间”也是相持于自然顺序递增排序之的Set结合,而非add()的顺序;
  • 只顾上表中包含不包含的运用;www.2527.com 8

(可参谋上面实例加深通晓)

上面是一个综合实例:

import java.util.*;public class UpdateStu implements Comparable<Object> { String name; long id; //构造方法 public UpdateStu(String name, long id) { this.id = id; this.name = name; } //定义排序规则 public int compareTo { UpdateStu upstu = (UpdateStu) o; int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1); return result; } //getter & setter public long getId() { return id; } public void setId { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static void main(String[] args) { UpdateStu stu1 = new UpdateStu("李同学", 01011);//呐!01011是八进制!!!!!!!!!!!!!!!!! UpdateStu stu2 = new UpdateStu("陈同学", 01021); UpdateStu stu3 = new UpdateStu("王同学", 01051); UpdateStu stu4 = new UpdateStu("马同学", 01012); TreeSet<UpdateStu> tree = new TreeSet<>(); tree.add; tree.add; tree.add; tree.add; Iterator<UpdateStu> it = tree.iterator(); System.out.println("Set集合中的所有元素:"); while (it.hasNext { UpdateStu stu = (UpdateStu) it.next(); System.out.println(stu.getId()   " "   stu.getName; } System.out.println("李马陈王是自然排序,其对应的对象名顺序是:"); System.out.println; System.out.println; System.out.println; System.out.println; System.out.println; System.out.println("tree.first().getName():"   tree.first().getName; System.out.println("tree.last().getName():"   tree.last().getName; System.out.println("------------------------------------------------"); it = tree.headSet.iterator(); System.out.println("截取stu3前面部分的集合:"); while (it.hasNext { UpdateStu stu = (UpdateStu) it.next(); System.out.println(stu.getId()   " "   stu.getName; } System.out.println("------------------------------------------------"); it = tree.subSet(stu2, stu3).iterator(); System.out.println("截取stu2&stu3中间部分的集合"); while (it.hasNext { UpdateStu stu = (UpdateStu) it.next(); System.out.println(stu.getId()   " "   stu.getName; } System.out.println("------------------------------------------------"); it = tree.tailSet.iterator(); System.out.println("截取stu1后面部分的集合"); while (it.hasNext { UpdateStu stu = (UpdateStu) it.next(); System.out.println(stu.getId()   " "   stu.getName; } }}

出口结果:

Set集合中的所有元素:521 李同学522 马同学529 陈同学553 王同学李马陈王是自然排序,其对应的对象名顺序是:stu1stu4stu2stu3 tree.first().getName():李同学tree.last().getName():王同学------------------------------------------------截取stu3前面部分的集合:521 李同学522 马同学529 陈同学------------------------------------------------截取stu2&stu3中间部分的集合529 陈同学------------------------------------------------截取stu1后面部分的集合521 李同学522 马同学529 陈同学553 王同学

最终重申:

  • 存入TreeSet类实现的set集合总得完成Comparable接口,该接口中的compareTo措施比较此对象(this/实现本接口的类的实例化对象)指定对象(传进来的作为参数的对象)的顺序;
  • 万一该对象小于、等于或超过钦点对象,则分级再次来到负整数、0或正整数。
  • Map集结未有继续Collection接口,其提供的是key到value的映射
  • Map中不能包涵同样的key,每个key不得不照射一个value
  • key还调整了存储对象在映射中的存储位置,但不是由key对象本身支配的,而是经过一种“散列技术”实行拍卖,发生一个散列码的整数值
  • 散列码一般来说作为二个偏移量,该偏移量对应分配给映射的内存区域的起始位置,进而明确存储对象在映射中的存储位置
  • Map会集包蕴Map接口以及Map接口的具备实现类。
5.1 Map接口
  • Map接口提供了将key映射到值的对象。
  • 二个映射无法满含重复的key,每一个key最三只好照射到一个值。
  • Map接口中一样提供了汇集的常用方法,除此而外还包含如下表所示的常用方法:www.2527.com 9

    上边是一个总结实例:

import java.util.*;public class UpdateStu { public static void main(String[] args) { Map<String,String> map = new HashMap<>(); // 创建Map实例 map.put("01", "李同学"); // 向集合中添加对象 map.put("02", "魏同学"); map.put("03", "王同学"); map.put("04", "陈同学"); map.put("05", "张同学"); map.put("06", "赵同学"); Set<String> set = map.keySet(); // 构建Map集合中所有key对象的集合 Iterator<String> it = set.iterator(); // 创建集合迭代器 System.out.println("key集合中的元素(map.keySet()   iterator; while (it.hasNext { // 遍历集合 System.out.println); } System.out.println("------------------------------------------------"); Collection<String> coll = map.values(); // 构建Map集合中所有values值集合 it = coll.iterator(); System.out.println("values集合中的元素(map.values()   iterator; while (it.hasNext { // 遍历集合 System.out.println); } System.out.println("------------------------------------------------"); System.out.println("map.get"   map.get; System.out.println("map.get"   map.get; System.out.println("map.get"   map.get; System.out.println("------------------------------------------------"); System.out.println("map.containsKey"   map.containsKey; System.out.println("map.containsKey"   map.containsKey; System.out.println("map.containsValue"   map.containsValue; System.out.println("map.containsValue"   map.containsValue; }}

出口结果:

key集合中的元素(map.keySet()   iterator:010203040506------------------------------------------------values集合中的元素(map.values()   iterator:李同学魏同学王同学陈同学张同学赵同学------------------------------------------------map.get李同学map.get魏同学map.get王同学------------------------------------------------map.containsKeytruemap.containsKeyfalsemap.containsValuetruemap.containsValuefalse

注意:Map群集中允许值对象是null,并且从不个数限制,举个例子,可透过“map.put("05",null)”语句向聚聚集加多对象。

5.2 Map接口的贯彻类
  • Map接口常用的完毕类有HashMapTreeMap
  • 建议选取HashMap类实现Map集合;
  • HashMap类实现的Map集合添加和删除映射关系效率更高
  • HashMap是基于哈希表Map接口的实现;
  • HashMap通过哈希码对当中间的照射关系举行快速查找
  • TreeMap中的映射关系存在一定的顺序
  • 设若指望Map会集中的靶子也设有一定的次第,应该运用TreeMap类完结Map会集。

HashMap类a .是依据哈希表的Map接口的兑现;b. 此完结提供所有可选的映射操作并允许使用null值和null键,但不可能不确认保证键的唯一性。c .HashMap通过哈希表对其内部的映射关系展开快速查找。d. 此类不保证酷炫的一一,特别是它不保障该每一个永恒不改变。

TreeMap类a. 不仅仅实现了Map接口,还落实了java.util.SortedMap接囗,由此,集结中的映射关系有所自然的顺序。b. 但在添加、删除和定位映射关系时,TreeMap类比HashMap类性能稍差。c. 由于TreeMap类达成的Map会集中的映射关系是依据键对象按照一定的顺序排列的,因此不允许键对象是null

可以经过HashMap类创设Map集合,当须要各种输出时,再创设一个完毕一样映射关系的TreeMap类实例。如下的归咎实例:

第一是三个Emp类文件:

public class Emp { private String e_id; private String e_name; public Emp( String e_id,String e_name) { this.e_id = e_id; this.e_name = e_name; } public String getE_id() { return e_id; } public void setE_id(String e_id) { this.e_id = e_id; } public String getE_name() { return e_name; } public void setE_name(String e_name) { this.e_name = e_name; } }

测验用主类:

import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;public class MapText { // 创建类MapText public static void main(String[] args) { // 主方法 Map<String, String> map = new HashMap<>(); // 由HashMap实现的Map对象 Emp emp = new Emp("351", "张三"); // 创建Emp对象 Emp emp2 = new Emp("512", "李四"); Emp emp3 = new Emp("853", "王一"); Emp emp4 = new Emp("125", "赵六"); Emp emp5 = new Emp("341", "黄七"); map.put(emp4.getE_id(), emp4.getE_name; // 将对象添加到集合中 map.put(emp5.getE_id(), emp5.getE_name; map.put(emp.getE_id(), emp.getE_name; map.put(emp2.getE_id(), emp2.getE_name; map.put(emp3.getE_id(), emp3.getE_name;// Set<String> set = map.keySet(); // 获取Map集合中的key对象集合 Iterator<String> it = map.keySet().iterator(); System.out.println("HashMap类实现的Map集合,无序:"); while (it.hasNext { // 遍历Map集合 String str =  it.next(); String name =  map.get; System.out.println(str   " "   name); } System.out.println; TreeMap<String, String> treemap = new TreeMap<>(); // 创建TreeMap集合对象 treemap.putAll; // 向集合添加对象 Iterator<String> iter = treemap.keySet().iterator(); System.out.println("TreeMap类实现的Map集合,键对象升序:"); while (iter.hasNext { // 遍历TreeMap集合对象 String str =  iter.next(); // 获取集合中的所有key对象 String name =  treemap.get; // 获取集合中的所有values值 System.out.println(str   " "   name); } }}

输出结果:

HashMap类实现的Map集合,无序:341 黄七125 赵六512 李四853 王一351 张三TreeMap类实现的Map集合,键对象升序:125 赵六341 黄七351 张三512 李四853 王一
  1. 将1~100里面包车型客车富有正整数寄存在八个List集合中,并将聚合中索引地方是10的对象从集结中移除。
import java.util.*;public class Text { public static void main(String[] args) { List<Integer> list = new LinkedList<>(); for(int i = 1 ;i<=100;i  ){ list.add(new Integer; } list.remove(list.get; System.out.println; }}

出口结果:

ok
  1. 个别向Set集合以及List会集中增多"A” “a” "c” "C” "a”5个成分,观察重复值"a”能还是不能够再一次地在List集结以及Set集合中增添。
import java.util.*;public class Text { public static void main(String[] args) { Set<String> set = new HashSet<>(); //HashSet是Set的子接口 set.add; set.add; set.add; set.add; set.add; List<String> list = new ArrayList<>(); list.add; list.add; list.add; list.add; list.add; System.out.println; System.out.println; }}

输出结果:

[a, A, c, C][a, c, A, a, C]
  1. 开创Map集合,创造Emp对象,并将Emp对象增加到群集中(Emp对象的id作为Map群集的键),并将id为“015”的靶子从集结中移除。

首先是Emp.java:

public class Emp { private String e_id; private String e_name; public Emp( String e_id,String e_name) { this.e_id = e_id; this.e_name = e_name; } public String getE_id() { return e_id; } public void setE_id(String e_id) { this.e_id = e_id; } public String getE_name() { return e_name; } public void setE_name(String e_name) { this.e_name = e_name; } }

然后是主类:

import java.util.*;public class Text { public static void main(String[] args) { Map<String, String> map = new TreeMap<>(); Emp emp = new Emp("001", "张三"); Emp emp2 = new Emp("005", "李四"); Emp emp3 = new Emp("004", "王五"); Emp emp4 = new Emp("010", "赵六"); Emp emp5 = new Emp("015", "魏七"); map.put(emp.getE_id(), emp.getE_name; map.put(emp2.getE_id(), emp2.getE_name; map.put(emp3.getE_id(), emp3.getE_name; map.put(emp4.getE_id(), emp4.getE_name; map.put(emp5.getE_id(), emp5.getE_name; map.remove; for (String string : map.keySet { System.out.println(map.get; } }}

出口结果:

张三王五李四赵六

参照他事他说加以考察资料:《Java从入门到明白》

TAG标签:
版权声明:本文由澳门新葡8455手机版发布于www.2527.com,转载请注明出处:实施练习题