java从入门到精通第11章_《Java从入门到精通》第十章学习笔记

第10章  Java集合类

一、概述

Java中的java.util包中提供了一些集合类,也被称为容器,不同于数组,集合的长度是可变的,存放的是对象的引用。常用的集合有List集合、Set集合、Map集合,其中List和Set实现了Collection接口。

二、集合类接口的常用方法

1、List接口的常用方法:因为继承了Collection接口,所以List接口也继承了Collection中的所有方法。List集合以线性有序的方式存储对象。List集合中可以包含重复的对象,的主要方法如下:

(1)add(int index,Object obj):返回值为void。用于向集合中指定索引位置添加对象。

(2)addAll(int index,Collection coll):返回值为boolean型。用于向集合中指定索引位置添加指定的集合对象。

(3)remove(int index):返回值为Object。用于移除集合中的指定索引位置的对象。

(4)get(int index):返回值为Object。用于获取指定索引位置的对象。

(5)indexOf(Object obj):返回值int。返回集合中对象第一次出现的索引位置,如果不存在则返回-1。

(6)lastIndexOf(Object obj):返回值int。返回集合中对象最后一次出现的索引位置,如果不存在则返回-1。

(7)subList(int formIndex,int toIndex):返回值List。获取两索引之间元素对象组成的List集合。

(8)set(int index,E element):返回值Object。用指定元素替换列表中指定索引位置的元素。

(9)listIterator():返回值ListIterator.用于获得一个包含所有对象的ListIterator列表迭代器。

1 importjava.util.List;2 importjava.util.LinkedList;3 importjava.util.Iterator;4 public classGenericTest{5 public static voidmain(String[] args){6 String a="A",b="B",c="C",d="D",e="E";//定义插入集合的字符串对象

7 List list=new LinkedList();8 //创建一个LinkedList集合

9 list.add(a);10 list.add(e);11 list.add(d);12 Iterator fristIterator=list.iterator();13 //创建List的迭代器

14 System.out.println("修改前集合中元素是:");15 while(fristIterator.hasNext()){16 System.out.print(fristIterator.next()+" ");17 }18 list.set(1,b);19 list.set(2,c);20 Iterator it=list.iterator();21 System.out.println("");22 System.out.println("修改后集合中元素是:");23 while(it.hasNext()){24 System.out.print(it.next()+" ");25 }26 }27 }

1 //创建List集合对象,通过add()方法添加元素,并将特殊对象元素在索引中出现的第一次、最后一次索引输出

2 importjava.util.List;3 importjava.util.LinkedList;4 importjava.util.Iterator;5 public classCollectionDemo {6

7 public static voidmain(String[] args) {8 String a="a",b="b",c="c",d="d",e="e",x="apple";9 List list=new LinkedList();10 list.add(a);11 list.add(x);12 list.add(b);13 list.add(c);14 list.add(d);15 list.add(e);16 list.add(a);17 list.add(d);18 list.add(x);19 Iterator it=list.iterator();20 System.out.println("列表List为:");21 int index=0;22 while(it.hasNext()){23 System.out.print("序号"+index+":"+it.next()+";");24 index++;25 }26 System.out.println("其长度为:"+list.size());27 if((list.indexOf(a)!=-1)){28 System.out.println("a第一次出现在列表中的索引位置为:"+list.indexOf(a));29 System.out.println("a最后一次出现在列表中的索引位置为:"+list.lastIndexOf(a));30 }else{31 System.out.println("a没有出现在列表中");32 }33 if((list.indexOf(x)!=-1)){34 System.out.println("apple第一次出现在列表中的索引位置为:"+list.indexOf(x));35 System.out.println("apple最后一次出现在列表中的索引位置为:"+list.lastIndexOf(x));36 }else{37 System.out.println("apple没有出现在列表中");38 }39 if((list.indexOf("ts")!=-1)){40 System.out.println("ts第一次出现在列表中的索引位置为:"+list.indexOf("ts"));41 System.out.println("ts最后一次出现在列表中的索引位置为:"+list.lastIndexOf("ts"));42 }else{43 System.out.println("ts没有出现在列表中");44 }45 }46 }

2、Set接口的常用方法:一样也继承了Collection接口的所有方法,并且Set集合中不允许有重复值。

(1)add(Object obj):如果Set集合中不存在obj则添加。

(2)addAll(Collection coll):将coll添加到Set集合尾部。

(3)remove(Object obj):移除指定的元素。

(4)retainAll(Collection coll):只保存Set集合中包含在coll集合中的元素。

(5)removeAll(Collection coll):移除Set集合中所有包含在coll集合中的元素。

(6)clear():清空Set集合。

(7)iterator():返回Set集合中元素进行迭代的迭代器。

//创建一个List集合向其中添加元素//再创建一个Set集合//利用addAll()将List集合对象存入Set集合,打印Set集合中元素

importjava.util.List;importjava.util.Set;importjava.util.LinkedList;importjava.util.HashSet;public classCollectionDemo {public static voidmain(String[] args) {int[] a0={1,3,5,6,8,9,12,15};int[] a1={2,4,5,6,8,11,13,15,21};

List list=new LinkedList();

Set set=new HashSet();for(intx:a0){

list.add(x);

}for(intx:a1){

set.add(x);

}

System.out.println("list集合初始化为:"+list);

System.out.println("set集合初始化为:"+set);

set.addAll(list);

System.out.println("新的set集合为:"+set+"长度为:"+set.size());

set.clear();

System.out.println("清空后set长度为:"+set.size());

}

}

3、Map接口的常用方法

Map接口提供了将键值映射到值的对象,一个映射中不能包括重复的键,而且每个键最多只能映射到一个值。

(1)put(key k,value v):向集合中添加指定的键和值。

(2)containskey(Object key):如果此映射包含指定的键的映射关系,则返回true.

(3)containsValue(Object value):如果此映射将一个或多个键指向指定值,则返回true.

(4)get(Object key):如果存在指定的键对象,则返回该对象对应的值,否则返回null。

(5)keySet():返回该集合中的所有键对象组成的Set集合。

(6)values():返回该集合中所有值对象形成的Collection集合。

1 //向一个Map集合中插入元素并根据Key的值打印集合中的元素

2

3 importjava.util.Map;4 importjava.util.HashMap;5 public classMapDemo {6

7 public static voidmain(String[] args) {8 Map map=new HashMap();9 map.put("1","apple");10 map.put("2","pear");11 map.put("3","orange");12 for(int i=1;i<=3;i++){13 System.out.println("第"+i+"个元素是:"+map.get(""+i+""));14 }15 }16 }

三、集合类接口的实现类

1、List接口的常用实现类有ArrayList和LinkedList。

(1)ArrayList类:通过List接口具备的方法实现了可变数组,可通过索引快速访问,但插入和删除操作速度较慢。

(2)LinkedList类:采用了链表结构,便于快速插入和删除对象,但随机访问速度较慢。

List list1=new ArrayList();

List list2=new LinkedList();

对象的声明采用接口类型可便于程序的拓展和修改,并通过泛型约束对象的类型。

1 importjava.util.List;2 importjava.util.ArrayList;3 public classGather {4

5 public static voidmain(String[] args) {6 //TODO Auto-generated method stub

7 List list=newArrayList();8 System.out.println("数组列表长度为:"+list.size());9 int ri=(int)(Math.random()*100);10 System.out.println("随机数取得为:"+ri);11 list.add("a");12 list.add("b");13 list.add("c");14 System.out.println("创建后数组列表长度为:"+list.size());15 int i=ri%list.size();16 System.out.println("随机获取数组中的元素:"+list.get(i));17 list.remove(2);18 System.out.println("将索引是'2'的元素移除后,数组中的元素是:");19 for(int j=0;j

2、Set接口的实现类常用的主要有HashSet类和TreeSet类,一般用Set接口类型声明创建的Set对象。

1 //People类定义

2 public classPeople {3 privateString name;4 private longid_card;5 public People(String name,longid_card){6 this.name=name;7 this.id_card=id_card;8 }9 public longgetId_card(){10 return this.id_card;11 }12 public void setId_card(longid){13 this.id_card=id;14 }15 publicString getName(){16 return this.name;17 }18 public voidsetName(String name){19 this.name=name;20 }21 }22

23 importjava.util.Iterator;24 importjava.util.Set;25 importjava.util.HashSet;26 public classCollectionDemo {27

28 public static voidmain(String[] args) {29 //TODO Auto-generated method stub

30 Set hashSet=new HashSet();31 hashSet.add(new People("KellyWong",98102106));32 hashSet.add(new People("TinsonG",98102118));33 hashSet.add(new People("MingLeu",98102135));34 hashSet.add(new People("YiJon",98102142));35 hashSet.add(new People("YooSan",98102151));36 Iterator it=hashSet.iterator();37 System.out.println("hashSet集合中的元素是:");38 while(it.hasNext()){39 People p=it.next();40 System.out.println(p.getName()+" "+p.getId_card());41 }42 }43 }

3、Map接口的实现类主要有HashMap类和TreeMap类,通常用HashMap类实现的Map集合对于添加和删除映射关系的效率更高。HashMap是基于哈希表的Map接口的实现,HashMap中允许使用null键和null值,但必须保证键的唯一性。TreeMap中映射关系存在一定的顺序,在考虑需要实现顺序存储时可以考虑使用TreeMap类,因为TreeMap类中映射的顺序是按照键对象的规则,所以不允许键对象为null。

1 public classEmp {2 publicString e_id;3 publicString e_name;4 publicEmp(String id,String name){5 this.e_id=id;6 this.e_name=name;7 }8 }9 //测试主类,分别创建一个由HashMap和TreeMap实现的Map集合,并遍历之

10 importjava.util.Map;11 importjava.util.HashMap;12 importjava.util.TreeMap;13 importjava.util.Set;14 importjava.util.Iterator;15

16 public classMapTest {17

18

19 public static voidmain(String[] args) {20 //TODO Auto-generated method stub

21 Map map=newHashMap();22 Emp emp1=new Emp("98102101","GTS");23 Emp emp2=new Emp("98102102","WJ");24 Emp emp3=new Emp("98102103","SYS");25 Emp emp4=new Emp("98102104","YYZ");26 Emp emp5=new Emp("98102105","LM");27 map.put(emp1.e_id, emp1.e_name);28 map.put(emp2.e_id, emp2.e_name);29 map.put(emp3.e_id, emp3.e_name);30 map.put(emp4.e_id, emp4.e_name);31 map.put(emp5.e_id, emp5.e_name);32 Set set=map.keySet();33 Iterator it=set.iterator();34 System.out.println("HashMap类实现的Map集合(无序):");35 while(it.hasNext()){36 String str=(String)it.next();37 String name=(String)map.get(str);38 System.out.println(str+" "+name);39 }40 TreeMap treemap=newTreeMap();41 treemap.putAll(map);42 Iterator iter=treemap.keySet().iterator();43 System.out.println("TreeMap类实现的Map集合(按键对象升序):");44 while(iter.hasNext()){45 String str=(String)iter.next();46 String name=(String)map.get(str);47 System.out.println(str+" "+name);48 }49 }50 }

//创建一个ArrayList类对象

importjava.util.List;importjava.util.ArrayList;importjava.util.Iterator;public classForArrayList {public static voidmain(String[] args){

List list=new ArrayList();for(int i=0;i<10;i++){int x=(int)(Math.random()*100);

list.add(x);

}

Iterator it=list.iterator();

System.out.println("ArrayList实例为:");while(it.hasNext()){

System.out.print(it.next()+" ");

}

System.out.println();

System.out.println("ArrayList实例中奇数为:");for(int i=0;i

System.out.print(list.get(i)+" ");

}

}

}

}

四、迭代器

1、利用Iterator接口创建迭代器,Iterator接口位于java.util包里。

(1)hasNext():如果当前仍有元素可以迭代,则返回true;

(2)next():返回迭代的下一个元素。

(3)remove():从迭代器指向的collection中移除迭代器返回的最后一个元素。

五、实战练习

1 /*

2 * 将1~100之间的所有整数存放在一个List集合中3 * 并将集合中索引位置为10的对象从中删除4 */

5 importjava.util.List;6 importjava.util.LinkedList;7 public classListDelDemo {8

9 public static voidmain(String[] args) {10 //TODO Auto-generated method stub

11 List list=new LinkedList();12 for(int i=1;i<=100;i++){13 list.add(i);14 }15 System.out.println("创建的整数列表为:");16 System.out.println(list);17 list.remove(10);18 System.out.println("删除索引位置为10的元素后整数列表为:");19 System.out.println(list);20 }21 }

1 /*

2 * 分别向Set集合和List集合中添加"A","a","c","C","a"3 * 观察重复值"a"能否在两集合中成功添加4 */

5 importjava.util.List;6 importjava.util.LinkedList;7 importjava.util.Set;8 importjava.util.HashSet;9 public classAddDemo {10

11 public static voidmain(String[] args) {12 //TODO Auto-generated method stub

13 List list=new LinkedList();14 Set set=new HashSet();15 String[] arrx={"A","a","c","C","a"};16 for(int i=0;i<5;i++){17 System.out.println("第"+i+"次添加元素:");18 list.add(arrx[i]);19 System.out.println("List集合为:"+list);20 if(set.add(arrx[i])){21 System.out.println("Set集合为:"+set);22 }else{23 System.out.println("Set集合无法添加元素:"+arrx[i]);24 }25 }26 System.out.println("List和Set初始化完成!");27 System.out.println("List集合为:"+list);28 System.out.println("Set集合为:"+set);29

30 }31

32 }

1 /*

2 * 创建Map集合,创建Emp对象,并将创建的Emp对象添加到集合中3 * Emp对象的id作为Map的键4 * 并将id为005的对象从集合中删除5 */

6 importjava.util.Map;7 importjava.util.HashMap;8 importjava.util.Iterator;9 public classMapDemo {10 public class Emp{ //创建Emp类

11 private String id; //private修饰保护对象属性

12 private intvalue;13 publicEmp(){14 }15 public Emp(String id,intvalue){16 this.id=id;17 this.value=value;18 }19 publicString getId(){20 return this.id;21 }22 public intgetValue(){23 return this.value;24 }25 }26

27 public static voidmain(String[] args) {28 //TODO Auto-generated method stub

29 String[] arrStr={"001","002","003","004","005","006","007"};30 MapDemo mapDemo=new MapDemo(); //main为static,需要先创建MapDemo对象以访问Emp

31 Map map=new HashMap();32 //创建map集合,键对象:String类型;值对象:Emp类型

33 for(int i=0;i<7;i++){34 Emp temp=mapDemo.new Emp(arrStr[i],i+100);35 map.put(temp.getId(),temp);36 }//初始化

37 System.out.println("map初始化完成!");38 Iterator it=map.keySet().iterator();39 while(it.hasNext()){40 String str=(String)it.next();41 String str1=map.get(str).getId();42 int val1=map.get(str).getValue();43 System.out.println(str+":"+str1+"---"+val1);44 }45 map.remove("005");46 System.out.println("删除键为'005'的映射后map为:");47 Iterator it1=map.keySet().iterator(); //需重新设置Iterator

48 while(it1.hasNext()){49 String str=(String)it1.next();50 String str1=map.get(str).getId();51 int val1=map.get(str).getValue();52 System.out.println(str+":"+str1+"---"+val1);53 }54

55 }56

57 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive之import和export使用详解

在hive-0.8.0后引入了import/export命令。 Export命令可以导出一张表或分区的数据和元数据信息到一个输出位置&#xff0c;并且导出数据可以被移动到另一个hadoop集群或hive实例&#xff0c;并且可以通过import命令导入数据。 当导出一个分区表&#xff0c;原始数据可能在hdfs的…

java中抓阄_如何进行抓阄

展开全部步骤&#xff1a;1、设计总体中的N个个体编号。2、把号码写在号e68a84e8a2ad3231313335323631343130323136353331333431366366签上&#xff0c;将号签放在一个容器中搅拌均匀。3、每次从中抽取一个号签&#xff0c;连续不放回抽取n次。4、将取出的n个号签上所对应的n个…

ARMV8 datasheet学习笔记5:异常模型

1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4&#xff1a;AArch64系统级体系结构之编程模型&#xff08;1&#xff09;-EL/ET/ST 一文 3. 异常处理路由对比 AArch32、AArch64架构下IRQ 和Data Abort 异常处理流程图对比. 3.1 IRQ 路由 3.1.1. AArch32 IRQ 路由 图 AAr…

leetcode 三数之和 python_16.leetcode题目讲解(Python):最接近的三数之和

题目如下&#xff1a;题目这道题可以用排一些特殊情况&#xff0c;减少计算量&#xff0c; 参考代码如下&#xff1a;class Solution:def threeSumClosest(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""# 如果只…

给GridView设置行高

近期在工作中遇到了这样一个问题,使用一个GridView展示数据,item中仅仅是一个TextView,可是里面显示的文字多少不固定多少,必须所有展示出来. 遇到的问题: 1.把item中的宽和高设置match_parent,还是设置成wrap_content,当内容过多的时候,会覆盖下一行的显示的内容. 2.没有一个属…

java导出excel float_【Java】导入导出Excel表格

1、将excel导入到内存1、 调用工作簿Workbook的静态方法getWorkbook(),获得工作簿Workbook对象InputStream in new FileInputStream(file);Workbook wb Workbook.getWorkbook(in);2、 获取Excel表中的工作表格Sheet3、 获取行、列sheet.getRows();sheet.getColumns();4、 读取…

C#的基础数据类型

一、概述 C# 的类型系统是统一的&#xff0c;因此任何类型的值都可以按对象处理。C# 中的每个类型直接或间接地从 object 类类型派生&#xff0c;而 object 是所有类型的最终基类。C#的数据类型主要分为三类&#xff1a;值类型、引用类型和指针类型&#xff08;如下图所示&…

mysql 占用的解决_解决 MySQL 突然占用全部内存的问题

最近更新&#xff1a;19th 6月, 2016前段时间落格从虚拟主机迁移到了独立的vps上&#xff0c;这下所有的维护内容都得我自己动手了。为了性能&#xff0c;另外既然能自己配环境了&#xff0c;自然不会用旧的配置。我用了 Ubuntu Server 16.04 PHP 7.0 Nginx MySQL 5.7 总之&…

[luoguP2957] [USACO09OCT]谷仓里的回声Barn Echoes(Hash)

传送门 团队里的hash水题&#xff0c;数据小的不用hash都能过。。 也就是前缀hash&#xff0c;后缀hash&#xff0c;再比较一下就行。 ——代码 1 #include <cstdio>2 #include <cstring>3 #define ULL unsigned long long4 5 int n, m, ans;6 char s1[81], s2[81]…

java内容寻址_java – 获取方法对象而不按名称寻址方法

有没有办法获取方法对象而不必使用方法的名称来获取它&#xff1f;例如,我有班级&#xff1a;class Car {public String drive();public String giveUp();public String fillUp();}我想创建一个Map< String,Method>方法(又名&#xff1a;(“move”,drive()),(“name”,gi…

【NOI2001】炮兵阵地

【题意】 给定一张n*m的图&#xff0c;每个位置要么是P&#xff0c;要么是H。P的位置可以放炮兵&#xff0c;H则不行。炮兵会朝四个方向&#xff0c;距离2个单位的方格进行攻击&#xff0c;求在没有炮兵互伤的情况下&#xff0c;最多能放的炮兵数量。 【题解】 这道题死坑。 一…

mysql怎么插入10w测试数据_mysql快速插入100万测试数据

向数据库添加100W条测试数据&#xff0c;直接在普通表中添加速度太慢&#xff0c;可以使用内存表添加&#xff0c;然后将内存表数据复制到普通表。创建表内存表DROP TABLE IF EXISTS test_memory;CREATE TABLE test_memory (id INT (11) NOT NULL AUTO_INCREMENT,item1 VARCHAR…

android:Android中用文件初始化sqlite数据库(zz)

很多时候在应用安装初始化时&#xff0c;需要创建本地数据库&#xff0c;同时为数据库添加数据&#xff0c;之后再从数据库中读取数据。这里有2个思路1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的sqlite的二进制文件进行直接copy到Android系统的数据…

面向对象-继承

继承&#xff1a; 概念&#xff1a; 继承父类的属性和行为&#xff0c;使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。继承是多态的前提&#xff0c;如果没有继承&#xff0c;就没有多态。 特点&#xff1a; java只能单…

如何发布Jar包到Maven中央仓库

https://www.iteblog.com/archives/1807.html转载于:https://www.cnblogs.com/longshiyVip/p/6858844.html

java previous_java – 在枚举类型上实现`next`和`previous`的最好方法是什么?

假设我有一个枚举&#xff1a;enum E {A, B, C;}如lucasmo by lucasmo所示&#xff0c;枚举值按照它们被初始化的顺序存储在静态数组中&#xff0c;您可以稍后用E.values()检索(克隆)此数组。现在假设我想实现E#getNext和E#getPrevious&#xff0c;以使所有下列表达式求值为tru…

什么是抽象类

抽象概念&#xff1a; 当我们在做子类共性功能抽取时&#xff0c;有些方法在父类中并没有具体的体现&#xff0c;这个时候就需要抽象类了&#xff01; 在Java中&#xff0c;一个没有方法体的方法应该定义为抽象方法&#xff0c;而类中如果有抽象方法&#xff0c;该类必须定义为…

java 加密 sha_Java加密 消息摘要算法SHA实现详解

SHA是消息摘要算法的一种实现方式&#xff0c;前面已经总结过MD2\4\5的实现&#xff0c;接下来就为大家总结一下SHA的实现。SHA的jdk实现&#xff1a;private static void SHA_JDK(){try {MessageDigest digest MessageDigest.getInstance("SHA");//我们可以通过SHA…

monkeyrunner脚本的录制和回放

参考&#xff1a;http://www.cnblogs.com/android-host/p/5378996.html 需要条件&#xff1a; 1.android-sdk 2.monkey_recorder.py 3.monkey_playback.py 操作步骤&#xff1a; 1)新建monkey_recorder.py文件&#xff0c;复制以下代码&#xff1a; #!/usr/bin/env monkeyrunne…

什么是接口

概念&#xff1a; 接口是更加彻底的抽象&#xff0c;接口中全部是抽象方法。接口是不能直接创建对象的。从JDK8之后&#xff0c;接口中不再只是抽象方法&#xff0c;接口还可以有默认方法&#xff08;也就是实例方法&#xff09;&#xff0c;和静态方法了&#xff0c;还包含了私…