JAVA笔记整理(九),JAVA中的集合
在工作中,我们经常需要将多个对象集中存放,可以使用数组,但是数组的长度一旦固定之后是不可变的,为了保存数量确定的数据,我们可以使用JAVA中的集合。
在我看来,JAVA中的集合可以看作是一个特殊的数据库,可以针对这个数据库进行数据的增删查改,可以查看数据库的大小,查看数据库是否为空等等。
JAVA中的集合是由Collection和Map两个接口派生出来的,正因为是两个接口,所以只能通过其子类来将其实例化,下图为常用集合:

Collection是List、Queue和Set接口的父接口,Map是HashMap的父接口。
正因为是接口,所以实际使用是需要通过其子类将其实例化。
Collection可以看作是传统意义上的数据库,提供一系列针对数据库的增删查改判断操作
List
public class ListDemo01 {
public static void main(String[] args) {
List list = new ArrayList();
// 使用add()向List中添加元素,可见List是可重复的
list.add("A");
list.add("B");
list.add("A");
// 通过循环遍历集合内容
for (int i = 0; i < list.size(); i++) { // 使用size()方法获得list长度
System.out.println("第" + (i + 1) + "个元素是: " + list.get(i)); // 使用get(x)来获得list中第x位置的元素
}
// 使用remove(x)来移除list中第x位的元素
list.remove(1);
// 通过循环遍历集合内容
for (int i = 0; i < list.size(); i++) { // 使用size()方法获得list长度
System.out.println("移除之后,第" + (i + 1) + "个元素是: " + list.get(i)); // 使用get(x)来获得list中第x位置的元素
}
// 使用isEmpty()来查看集合是否为空,如果返回true则为空,false则不为空
if (list.isEmpty()) {
System.out.println("这个集合是空的");
} else {
System.out.println("这个集合不是空的");
}
// 使用addAll将另一个集合添加到集合中
List list2 = new ArrayList();
list2.add(123);
list2.add("D");
list2.add(123);
list.addAll(list2);
for (int i = 0; i < list.size(); i++) { // 使用size()方法获得list长度
System.out
.println("移除之后,又添加后,第" + (i + 1) + "个元素是: " + list.get(i)); // 使用get(x)来获得list中第x位置的元素
}
// 使用contains(x)方法来判断集合中是否存在x元素
if (list.contains("Z")) {
System.out.println("集合中存在这个元素");
} else {
System.out.println("集合中不存在这个元素");
}
// 使用containsAll(x)方法来判断集合中是否包含某个集合
List list3 = new ArrayList();
list3.add("A");
list3.add("B");
if (list.containsAll(list3)) {
System.out.println("list中包含list3");
} else {
System.out.println("list中不包含list3");
}
// 使用indexOf(x)来获取x元素在集合中的位置,如果存在该元素,则返回该元素首次出现的位置,如果不存在,则返回-1
System.out.println("123在list2中出现的位置为: " + list2.indexOf(123));
System.out.println("123在list2中出现的位置为: " + list2.indexOf(456));
// 使用indexOf(x)来获取最后一个x元素在集合中的位置,如果存在该元素,则返回该元素最后出现的位置,如果不存在,则返回-1
System.out.println("123在list2中最后一次出现的位置为: " + list2.lastIndexOf(123));
System.out.println("123在list2中最后一次出现的位置为: " + list2.lastIndexOf(456));
//使用set(x,y)来讲list中第x个元素替换为y
list2.set(2, 456);
for (int i = 0; i < list2.size(); i++) {
System.out.println("替换之后,list的第" + (i+1) + "个元素为: " + list2.get(i));
}
System.out.println(list2);
}
}
所有的Collection的实现类都重写了toString()方法,并且ArrayList是以“动态数组”的形式来存储数据的,当使用System.out.println()来直接输出List的话,会输出[xx,yy,zz]的形式
set
HashSet是Set的实现类,它就好像一个箱子,我们可以往这个箱子里放若干个对象,但是我们却无法获取到箱子里面对象的顺序,也不能放相同的对象
HashSet和ArrayList提供的方法基本相同,只是HashSet中不允许添加重复的对象,如果使用add()添加重复对象,则会返回false,并且新添加的元素不会被添加。
当向一个HashSet添加一个元素的时候,HashSet会调用该对的hashCode()方法来获取到这个对象的hashCode值,然后集合中存在相同hashCode的对象,则添加不成功。
public class SetDemo02 {
public static void main(String[] args) {
Set set = new HashSet();
//通过add(x)方法来讲x元素添加到set中
set.add("A");
set.add(1234);
set.add(1234);
//使用set的iterator()方法获取到set的迭代期,再通过迭代期的next()方法获取到set中的值
//通过输出结果可以看到上面添加的1234其实只添加成功一个
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
Set set2 = new HashSet();
set2.add("B");
set2.add("C");
set2.add("D");
//通过addAll()方法来将一个set集合添加到另一个中
set.addAll(set2);
iterator = set.iterator();
System.out.println("添加进一个集合之后,集合中的元素有");
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
//通过contains()方法来判断集合中是否包含某个元素
if (set.contains("A")) {
System.out.println("这个集合中包含A元素");
}else {
System.out.println("这个集合中不包含A元素");
}
//使用remove(x)来移除集合中的x元素,如果存在并移除,则返回true,否则返回false
if (set.remove("A")) {
System.out.println("集合中存在A元素,并且已经移除");
}else {
System.out.println("集合中不存在A元素");
}
}
}
Map
JAVA提供了一种以<键,值>形式存储的集合---Map,你可以通过“键”查找“值”。一个 Map 中不能包含相同的 key ,每个 key 只能映射一个 value 。
Map是一个接口,他提供了HashMap, Hashtable, LinkedHashMap等子类,实际中常用HashMap。
Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
public class MapDemo01 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
//使用put(x,y)来添加键值对
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
map.put("key4", "value4");
map.put("key5", "value5");
map.put("key6", "value6");
//通过get(x)来获取key为x的值
String str = map.get("key1");
System.out.println(str);
//使用containsKey(x)来判断是否存在key为x的键值对
if (map.containsKey("key3")) {
System.out.println("key值为key3的集合存在");
} else {
System.out.println("key值为key3的集合不存在");
}
//使用containsValue(x)来判断是否存在Value为x的键值对
if (map.containsValue("key3")) {
System.out.println("value值为key3的集合存在");
} else {
System.out.println("value值为key3的集合不存在");
}
//使用keySet()来获取map中所有键,返回一个Set集合
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
System.out.println("key:" + s + "----value:" + map.get(s));
}
//使用values()来获取map中所有值,返回一个Collection
Collection<String> c = map.values();
Iterator iterator2 = c.iterator();
while (iterator2.hasNext()) {
System.out.println(iterator2.next());
}
//使用remove(x)来移除key为x的键值对
map.remove("key3");
System.out.println("移除之后,map中剩余的键值对");
Collection<String> c2 = map.values();
Iterator iterator3 = c2.iterator();
while (iterator3.hasNext()) {
System.out.println(iterator3.next());
}
}
}
JAVA笔记整理(九),JAVA中的集合的更多相关文章
- java笔记整理
Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...
- java 笔记整理
在19寒假对java基础进行自学,总结的笔记整理出来 ==================================================== 排序查找 冒泡排序法1.一共会比较数组元 ...
- JAVA笔记整理(一),JAVA介绍
JAVA语言的版本: J2SE(Java2 Platform Standard Edition,java平台标准版),后更名为:JAVA SE J2EE(Java 2 Platform,Enterpr ...
- Java笔记(十九)……多线程
概述 进程: 是一个正在执行中的程序 每一个进程执行都有一个执行顺序,该执行顺序是一个执行路径,或者叫一个控制单元 线程: 就是进程中的一个独立的控制单元,线程在控制着进程的执行 一个进程中至少有一个 ...
- Java笔记(九)
网络编程: UDP传输: (UdpSend发送端)通过UDP传输方式,将一段文字数据发送出去: (1)建立udpsocket服务 (2)提供数据,并将数据封装到数据包中 (3)通过socket服务的发 ...
- 【Java笔记】配置文件java.util.Properties类的使用
配置文件的路径:项目名/src/main/resources/mmall.properties mmall.properties的内容是键值对.例如假设写了ftp服务器的一些信息. ftp.serve ...
- Java笔记12:Java对象排序
代码: import java.util.Arrays; import java.util.Comparator; class Person { private String name; privat ...
- JAVA笔记整理(四),JAVA中的封装
什么是封装 所谓的封装就是把数据项和方法作为一个独立的整体隐藏在对象的内部,具体的实施细节不对外提现,仅仅保留有限的外部接口,封装外的用户只能通过接口来进行操作.就好比开启一台电脑需要进行很多个步骤, ...
- Java学习笔记十九:Java中的访问控制修饰符
Java中的访问控制修饰符 一:Java修饰符的种类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class Hello ...
随机推荐
- .Net MVC 下载网站的文件
目录 前言 C#文件的下载 ajax 返回文件路径,使用window.open打开 前言 上传文件我使用的是Bootstrap的插件FileInput,这个抽时间看看写个博客 现在下载我遇到坑了,而这 ...
- LODOP打印table超宽用省略号带'-'的内容换行问题
前面的博文有div超宽隐藏(LODOP打印超过后隐藏内容样式),还有有table设置超宽隐藏(),此外,还有超宽后用省略号表示的css样式,此文是针对这个样式的.该样式正常情况下没问题,但是遇到-短线 ...
- 06点睛Spring MVC 4.1-文件上传
6.1 文件上传 在控制器参数使用@RequestParam("file") MultipartFile file接受单个文件上传; 在控制器参数使用@RequestParam(& ...
- 创建 LVM
1.将物理磁盘设备条带化为物理卷 # pvcreate /dev/sdb 查看物理卷: # pvs# pvdisplay 2.创建卷组,并添加 PV 到卷组 # vgcreate vg1 /dev/s ...
- 13、OpenCV实现图像的空间滤波——图像平滑
1.空间滤波基础概念 1.空间滤波基础 空间滤波一词中滤波取自数字信号处理,指接受或拒绝一定的频率成分,但是空间滤波学习内容实际上和通过傅里叶变换实现的频域的滤波是等效的,故而也称为滤波.空间滤波主要 ...
- 开发环境下的 Kubernetes 容器网络演进之路
马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech 使用 Docker+Kubernetes 来简化开发人员的工作流,使应用更加快速地迭代,缩短发布周期,在很多研发团队中已经是常见的做法. 如果 ...
- 高级UI-自定义动画框架
有的时候会需要做一些自定义的动画效果,在会反复用到的动画效果可以考虑做成动画框架,方便使用,做成框架的话就需要考虑很多的问题,最典型的问题就是属性和方法必须要是可配置的,这里就来聊一聊自定义动画框架的 ...
- python 爬虫实例(四)
环境: OS:Window10 python:3.7 爬取链家地产上面的数据,两个画面上的数据的爬取 效果,下面的两个网页中的数据取出来 代码 import datetime import threa ...
- 2019.12.12 Java的多线程&匿名类
Java基础(深入了解概念为主) 匿名类 定义 Java匿名类很像局部或内联系,只是没有明细.我们可以利用匿名类,同时定义并实例化一个类.只有局部类仅被使用一次时才应该这么做. 匿名类不能有显式定义的 ...
- MaskRCNN 奔跑自己的数据
import os import sys import random import math import re import time import numpy as np import cv2 i ...