Java学习笔记之---集合
Java学习笔记之---集合
(一)集合框架的体系结构
(二)List(列表)
(1)特性
1.List中的元素是有序并且可以重复的,成为序列
2.List可以精确的控制每个元素的插入位置,并且可以删除指定位置的元素
3.List的两个主要实现类是ArrayList和LinkedList
(2)Arraylist
1.ArrayList底层是由数组实现的
2.动态增长,以满足应用程序的需求
3.在列表尾部插入和删除非常有效
4.更适合查找和更新元素
5.元素允许为null
(3)List常用方法
1.add(E e
) 向列表的尾部添加指定的元素(可选操作)
2.add(int index, E element
) 在列表的指定位置插入指定元素(可选操作)。
3.clear() 从列表中移除所有元素(可选操作)。
4.contains(Object obj) 如果列表包含指定的元素,则返回 true。
5.get(int index
) 返回列表中指定位置的元素
6.hashCode() 返回列表的哈希码值
7.indexOf(Object obj) 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
8.isEmpty() 如果列表不包含元素,则返回 true。
9.iterator() 返回按适当顺序在列表的元素上进行迭代的迭代器
10.remove(int index
) 移除列表中指定位置的元素(可选操作)。
11.removeAll() 从列表中移除指定 collection 中包含的其所有元素(可选操作)。
12.set(int index, E element
) 用指定元素替换列表中指定位置的元素(可选操作)。
13.size() 返回列表中的元素数。
14.equals(Object obj) 比较指定的对象与列表是否相等
(4)实例
public class Student {
private String sno;
private String name;
private String sex;
private int age; public Student(String sno, String name, String sex, int age) {
this.sno = sno;
this.name = name;
this.sex = sex;
this.age = age;
} public String getSno() {
return sno;
} public void setSno(String sno) {
this.sno = sno;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
import java.util.ArrayList; public class StudentTest { public static void main(String[] args){ //创建学生对象 Student s1=new Student("19501","丽丽","女",18); Student s2=new Student("19512","张三","男",20); Student s3=new Student("19523","李四","男",19); //创建集合 ArrayList li=new ArrayList(); //向集合中添加对象 li.add(s1); li.add(s2); li.add(s3); //显示集合中的对象 System.out.println("*************集合中的所有对象************"); for(int i=0;i<li.size();i++){ System.out.println(((Student)li.get(i)).getSno()+","+((Student)li.get(i)).getName()); } //删除集合中的某一个对象 System.out.println("*************删除一个对象后************"); li.remove(2); for(int i=0;i<li.size();i++){ System.out.println(((Student)li.get(i)).getSno()+","+((Student)li.get(i)).getName()); } //向索引值为1的位置添加一个对象 System.out.println("*************添加一个对象后************"); Student s4=new Student("19533","听听","女",17); li.add(1,s4); for(int i=0;i<li.size();i++){ System.out.println(((Student)li.get(i)).getSno()+","+((Student)li.get(i)).getName()); } System.out.println("*************修改一个对象后************"); s2.setName("张张"); li.set(2,s2); for(int i=0;i<li.size();i++){ System.out.println(((Student)li.get(i)).getSno()+","+((Student)li.get(i)).getName()); } } }
运行结果:
*************集合中的所有对象************
19501,丽丽
19512,张三
19523,李四
*************删除一个对象后************
19501,丽丽
19512,张三
*************添加一个对象后************
19501,丽丽
19533,听听
19512,张三
*************修改一个对象后************
19501,丽丽
19533,听听
19512,张张
(三)Set
(1)特性
1.set是元素无序并且不可以重复的集合,成为集
(2)HashSet
1.HashSet是Set中的一个重要实现类,称为哈希集
2. HashSet中的元素无序并且不可以重复
3. HashSet中只允许一个元素为null
4.具有良好的存取和查找功能
(3)Set常用方法
1. add(E e
) 如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。
2. clear() 移除此 set 中的所有元素(可选操作)。
3. contains(Object obj) 如果 set 包含指定的元素,则返回 true
4. equals(Object obj) 比较指定对象与此 set 的相等性。
5. isEmpty() 如果 set 不包含元素,则返回 true
6. hashCode() 返回 set 的哈希码值
7. iterator() 返回在此 set 中的元素上进行迭代的迭代器
8. remove(Object obj) 如果 set 中存在指定的元素,则将其移除(可选操作)。
9. size() 返回 set 中的元素数(其容量)。
(4)实例
import java.util.Objects; public class Cat { private String name; private String species; private int month; public Cat(String name, String species, int month) { this.name = name; this.species = species; this.month = month; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSpecies() { return species; } public void setSpecies(String species) { this.species = species; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } @Override public String toString() { return "Cat{" + "name='" + name + '\'' + ", species='" + species + '\'' + ", month=" + month + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Cat cat = (Cat) o; return getMonth() == cat.getMonth() && getName().equals(cat.getName()) && getSpecies().equals(cat.getSpecies()); } @Override public int hashCode() { return Objects.hash(getName(), getSpecies(), getMonth()); } }
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class CatTest { public static void main(String[] args){ //创建对象 Cat lili=new Cat("lili","英国短毛猫",2); Cat coco=new Cat("coco","暹罗猫",5); Cat lulu=new Cat("lulu","布偶猫",8); //创建set集合,设置泛型,调用时不用强制类型转换,减少错误的产生 Set<Cat> set=new HashSet<Cat>(); set.add(lili); set.add(coco); set.add(lulu); //添加对象 System.out.println("*********添加对象后的结果*********"); Cat lisa=new Cat("lisa","折耳猫",3); set.add(lisa); //显示宠物猫信息,通过迭代器显示 Iterator it=set.iterator();//将set中的信息存入迭代器中 while(it.hasNext()){//通过hasNext()判断集合中是否还有下一个 System.out.println(it.next());//自动调用toString方法 } System.out.println("*********添加重复属性对象后的结果*********"); //添加属性重复的对象,需要重写hashCode方法和equals方法 Cat lili2=new Cat("lili","英国短毛猫",2); set.add(lili2); Iterator it1=set.iterator();//将set中的信息存入迭代器中 while(it1.hasNext()){//通过hasNext()判断集合中是否还有下一个 System.out.println(it1.next());//自动调用toString方法 } //修改对象属性 System.out.println("*********查找对象信息*********"); //通过对象名查找 boolean a=set.contains(lili); if(a){ System.out.println("找到了"); }else{ System.out.println("没找到"); } //通过属性查找 Iterator it2=set.iterator(); while(it2.hasNext()){ Cat c=(Cat)it2.next(); if(c.getName().equals("lili")){ System.out.println("找到了"); break; } } //删除对象信息 //删除一个对象 System.out.println("*********删除一个对象信息后的结果*********"); set.remove(lili); Iterator it3=set.iterator();//将set中的信息存入迭代器中 while(it3.hasNext()){//通过hasNext()判断集合中是否还有下一个 System.out.println(it3.next());//自动调用toString方法 } //删除多个对象信息 System.out.println("*********删除多个对象信息后的结果*********"); Set set1=new HashSet(); for(Cat c:set){ if(c.getMonth()<5){ set1.add(c); } } set.removeAll(set1); Iterator it4=set.iterator();//将set中的信息存入迭代器中 while(it4.hasNext()){//通过hasNext()判断集合中是否还有下一个 System.out.println(it4.next());//自动调用toString方法 } //删除全部对象信息 System.out.println("*********删除全部对象信息后的结果*********"); set.removeAll(set); if(set.isEmpty()){ System.out.println("都找不到了"); } } }
运行结果:
*********添加对象后的结果*********
Cat{name='lisa', species='折耳猫', month=3}
Cat{name='lulu', species='布偶猫', month=8}
Cat{name='coco', species='暹罗猫', month=5}
Cat{name='lili', species='英国短毛猫', month=2}
*********添加重复属性对象后的结果*********
Cat{name='lisa', species='折耳猫', month=3}
Cat{name='lulu', species='布偶猫', month=8}
Cat{name='coco', species='暹罗猫', month=5}
Cat{name='lili', species='英国短毛猫', month=2}
*********查找对象信息*********
找到了
找到了
*********删除一个对象信息后的结果*********
Cat{name='lisa', species='折耳猫', month=3}
Cat{name='lulu', species='布偶猫', month=8}
Cat{name='coco', species='暹罗猫', month=5}
*********删除多个对象信息后的结果*********
Cat{name='lulu', species='布偶猫', month=8}
Cat{name='coco', species='暹罗猫', month=5}
*********删除全部对象信息后的结果*********
都找不到了
(四)Map
(1)特性
1.Map中的数据是以键值对(key-value)的形式存储的
2. key-value是以Entry类型的对象实例存在
3.可以通过key快速查找value
4.一个映射不能包含重复的键
5.每个键最多只能映射到一个值
(2)HashMap
1.基于哈希表的Map接口的实现
2.允许用null值和null键
3.key值不允许重复
4. HashMap中的Entry对象是无序排列的
(3)Map常用方法
1. clear() 从此映射中移除所有映射关系(可选操作)。
2. hashCode() 返回此映射的哈希码值
3. isEmpty() 如果此映射未包含键-值映射关系,则返回 true。
4. remove(Object key
) 如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
5. size() 返回此映射中的键-值映射关系数
6. equals(Object obj) 比较指定的对象与此映射是否相等
7.put(K key,V value) 将指定的值与此映射中的指定键关联(可选操作)。
8.values() 返回此映射中包含的值的 Collection
视图。
9.KeySet() 返回此映射中包含的键的 Set
视图。
10.entrySet() 返回此映射中包含的映射关系的 Set
视图
11.get(Object obj) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
(4)实例
import java.util.*; public class Animal { public static void main(String[] args){ //创建一个集合 Map<String,String> animal=new HashMap<String,String>(); //创建键值对,将键值对存入集合 for(int i=0;i<3;i++) { System.out.println("********请输入key和value******"); Scanner sc = new Scanner(System.in); String key = sc.next(); String value=sc.next(); animal.put(key,value); } //使用迭代器打印出所有value的值 System.out.println("********打印出所有value的值******"); Iterator<String> it=animal.values().iterator(); while(it.hasNext()){ System.out.println(it.next()); } //使用entrySet打印出所有的键值对 System.out.println("********打印出所有的键值对******"); Set<Map.Entry<String, String>> entryset=animal.entrySet(); for(Map.Entry<String, String> s1:entryset){ System.out.println(s1.getKey()+"-"+s1.getValue()); } //通过key找到value,使用keySet方法 System.out.println("********请输入key值******"); Scanner s=new Scanner(System.in); String s2=s.next(); Set<String> k=animal.keySet(); for(String k1:k){ if(s2.equals(k1)){ System.out.println(s2+"对应的value值为:"+animal.get(k1)); break; } } //删除一个键值对 System.out.println("********打印出所有的键值对******"); animal.remove("cat"); Iterator<String> it1=animal.values().iterator(); while(it1.hasNext()){ System.out.println(it1.next()); } } }
运行结果:
********请输入key和value******
cat
猫
********请输入key和value******
dog
狗
********请输入key和value******
pig
猪
********打印出所有value的值******
猫
狗
猪
********打印出所有的键值对******
cat-猫
dog-狗
pig-猪
********请输入key值******
pig
pig对应的value值为:猪
********打印出所有的键值对******
狗
猪
Java学习笔记之---集合的更多相关文章
- Java学习笔记之集合
集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组而数组的长度固定 ...
- 【原】Java学习笔记026 - 集合
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:从三国演义中 ...
- java学习笔记之集合家族2
集合体系 一.数据结构 List集合储存数据结构 <1>堆栈结构 特点:先进后出 <2>队列结构 特点:先进先出 <3>数组结构 特点:查询快,增删慢 <4& ...
- 【Java学习笔记】集合转数组---toArray()
package p2; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ...
- 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素
import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...
- java学习笔记之集合家族1
集合 集合介绍: 由于数组中存放对象,对对象操作起来不方便.java中有一类容器,专门用来存储对象. 集合与数组的区别: 1.数组的长度固定的,而集合长度时可变的 2.数组只能储存同一类型的元素,而且 ...
- 【原】Java学习笔记028 - 集合
package cn.temptation; import java.util.HashSet; import java.util.Set; public class Sample01 { publi ...
- 5.3类集(java学习笔记)集合的输出
一.集合的输出 迭代输出:Iteratror接口 在输出集合时,最标准的方法是使用迭代器迭代输出. 1,List中的迭代器. Iterator中包含三个方法: hasNex()t判断集合内是否有元素存 ...
- java学习笔记——Collection集合接口
NO 方法名称 描述 1 public boolean add(E e) 向集合中保存数据 2 public void clear() 清空集合 3 public boolean contains(O ...
随机推荐
- 在2005年,Unicode 的第十万个字符被采纳且认可成为标准之一(超过这65535范围的Unicode字符,则需要使用一些诡异的技巧来实现)
在计算机科学领域中,Unicode(统一码.万国码.单一码.标准万国码)是业界的一种标准,它可以使电脑得以体现世界上数十种文字的系统.Unicode 是基于通用字符集(Universal Charac ...
- Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法
原文:Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法 [函数名称] 图像马赛克效果 MosaicProcess(WriteableBitmap src, i ...
- 【Git】打标签
打标签 同大多数 VCS 一样,Git 也可以对某一时间点上的版本打上标签.人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做.本节我们一起来学习如何列出所有可用的标签,如何新建标签,以 ...
- GlusterFS集群文件系统研究(负载均衡的最常用办法) good
http://blog.csdn.net/liuaigui/article/details/6284551 http://blog.csdn.net/liuaigui/article/details/ ...
- .net core 利用Selenium和PhantomJS后台生成EChart图片
1.引用 NuGet安装: Selenium.Support Selenium.WebDriver Selenium.WebDriver.PhantomJS.CrossPlatform (分布Lin ...
- QT 设置应用程序图标和可执行程序图标(另有setWindowTitle和setWindowIcon)
首先准备个ICO图标.例如:myappico.ico用记事本新建个文件里面就写一行:IDI_ICON1 ICON DISCARDABLE "/images/myap ...
- Oracle11超详细安装教程和配置
这篇博客主要是介绍一下Oracle数据的安装过程和简单的配置,帮助大家可以简单的让Oracle运行起来,只是一个基础的教程. 准备工作: 如果你以前装过Oracle数据库,而且安装目录要改变请先打开注 ...
- ansible(三)
一.setup模块(收集信息 ) 1.ansible中的setup模块可以收集到的信息 ansible web -m setup ansible_all_ipv4_addresses # ipv4的所 ...
- You can't specify target table 'tbl_students' for update in FROM clause错误
此问题只出现在mysql中 oracle中无此问题 在同一语句中,当你在select某表的数据后,不能update这个表,如: DELETE FROM tbl_students WHERE id NO ...
- react-redux的Provider和Connect的引发的思考
react是当下非常流行的JS框架,react秉承的设计原则是一切皆组件:react-redux是react中使用redux的桥接工具,react-redux也继承react的设计原则,使用组件的形式 ...