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 ...
随机推荐
- Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化
原文:Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化 [函数名称] 简单统计法图像二值化 WriteableBitmap StatisticalThSegment(Wr ...
- Win8Metro(C#)数字图像处理--2.25二值图像距离变换
原文:Win8Metro(C#)数字图像处理--2.25二值图像距离变换 [函数名称] 二值图像距离变换函数DistanceTransformProcess(WriteableBitmap sr ...
- MiTeC System Information Component Suite 10.9.2 D5-XE3 Full Source
The most complex system information probe in Delphi world, it consists of many standalone components ...
- Qt Quick 事件处理之信号与槽(foruok的博客)
前面两篇文章<QML 语言基础>和<Qt Quick 简单教程>中我们介绍了 QML 语言的基本语法和 Qt Quick 的常见元素,亲们,通过这两篇文章,您应该已经可以完成简 ...
- Oracle 宣布 Java 7 生命周期终结
快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中. <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...
- 百度 Echarts 地图表 js 引用路径
使用地图表格,除了需echarts,还需zrender,自行下载JS文件: 目标,做成这样的效果:http://echarts.baidu.com/doc/example/map3.html ...
- Qt的模态对话框和非模态对话框 经常使用setAttribute (Qt::WA_DeleteOnClose)
模态对话框就是指在子对话框弹出时,焦点被强行集中于该子对话框,子对话框不关闭,用户将无法操作其他的窗口.非模态相反,用户仍然可以操作其他的窗口,包括该子对话框的父对话框. 如果从线程角度来讲,模态对话 ...
- WCF学习--我的第一个WCF例子
Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口. 通信双方的沟通方式,由合约来订定.通信双方所 ...
- 30+ 强大的Buddypress主题–开始您的社区站点吧
BuddyPress起源于2008年,当时设计者设想添加社交网络功能到WordPress多用户版本中.第一个正式稳定版本的发布是在2009年的5月.自从那时起.BuddyPress开始快速的成长和演变 ...
- hive表批处理
对hive中的表进行批量处理,如下是一个简单的脚本 #给定一个hive数据库名,生成它的所有表的create SQL语句,并导出到文件 create_fun(){ hive -e } #显示一个表中所 ...