java list 字节大小_我在上海乐字节学习Java基础第二十天(集合)

一、集合

1、回顾数组: 存储同一种数据类型的集合容器

数组的特点:只能存储同一种数据类型的数据;一旦初始化,长度固定;数组中的元素与元素之间的内存地址是连续的。

注意: Object类型的数组可以存储任意类型的数据。

`public class Demo20.1{

public static void main(String[] args) {

Object[] arr = new Object[10];

arr[1] = "abc";

arr[2] = 'a';

arr[3] = 12;

}

}`

2、集合:集合是存储对象数据的集合容器。

集合比数组的优势:

① 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型的数据。

② 集合的长度是会发生变化的,数组的长度是固定的。

3、Collection:单例集合的跟接口

① List:如果是实现了List接口的集合类,具备的特点:有序,可重复。

② Set:如果是实现了Set接口的集合类,具备特点:无序,不可重复。![单例集合和双例集合](https://img-blog.csdn.net/20180713101045910?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01yX0dhb1lhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

4、Collection接口中的方法

① 增加

◆ add(object):添加成功返回true,添加 失败返回false

◆ addAll(Collection c):把一个集合的元素添加到另外一个集合中去

② 删除

◆ clear()

◆ remove(Object o)

◆ removeAll(Collection c)

◆ retainAll(Collection c)

③ 查看

◆ size()

import java.util.ArrayList;

import java.util.Collection;

public class Demo20.2{

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("张三");

c.add("李四");

c.add("王五");

System.out.println("添加成功吗?"+c.add("小六"));

//创建集合

Collection c2 = new ArrayList();

c2.add("张三");

c2.add("李四");

c.addAll(c2); // 把c2的元素的添加到c集合中去

//删除方法

//c.clear(); //clear()清空集合中的元素

System.out.println("删除成功吗?"+c.remove("美美")); // remove 指定集合中的元素删除,删除成功返回true,删除失败返回false.

c.removeAll(c2); //删除c集合中与c2的交集元素。

c.retainAll(c2); //保留c集合与c2的交集元素,其他的元素一并删除。

System.out.println("查看元素个数:"+c.size());

System.out.println("集合的元素:"+ c);

}

}`

④ 判断

◆ isEmpty()

◆ contains(Object o)

◆ containsAll(Collection> c)

import java.util.ArrayList;

import java.util.Collection;

class Person{

int id;

String name;

public Person(int id, String name) {

this.id = id;

this.name = name;

}

@Override

public String toString() {

return "{编号:"+this.id+" 姓名:"+ this.name+"}";

}

@Override

public boolean equals(Object obj) {

Person p = (Person)obj;

return this.id == p.id ;

}

//java规范: 一般重写equlas方法我们都会重写hashCode方法的

@Override

public int hashCode() {

return this.id;

}

}

public class Demo20.3{

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("张三");

c.add("李四");

c.add("王五");

System.out.println("判断集合是否为空元素:"+ c.isEmpty());

System.out.println("判断集合中是否存在指定的元素:"+ c.contains("大宝"));

//集合添加自定义的元素Collection c1 = new ArrayList();

c1.add(new Person(110,"狗娃"));

c1.add(new Person(119,"狗剩"));

c1.add(new Person(120,"铁蛋"));

Collection c2 = new ArrayList();

c2.add(new Person(110,"狗娃"));

c2.add(new Person(119,"狗剩"));

c2.add(new Person(104,"陈狗剩"));

System.out.println("c1集合有包含c2集合中的所有元素吗?"+ c1.containsAll(c2));

System.out.println("存在该元素吗?"+c1.contains(new Person(120,"陈铁蛋"))); // 其实contains方法内部是依 赖于equals方法进行比较的。

System.out.println("集合的元素:"+ c1);

}

}

⑤ 迭代

◆ toArray()

◆ iterator()import java.util.ArrayList;

import java.util.Arrays;

import java.util.Collection;

public class Demo20.4 {

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("张三");

c.add("李四");

c.add("王五");

Object[] arr = c.toArray(); //把集合中的元素全部存储到一个Object的数组中返回

System.out.println("数组的元素:"+Arrays.toString(arr));Collection c2 = new ArrayList();

c2.add(new Person(110,"狗娃"));

c2.add(new Person(119,"狗剩"));

c2.add(new Person(120,"铁蛋"));

Object[] arr = c2.toArray();

//需求: 把编号是110的人信息输出

for(int i = 0 ; i

Person p = (Person) arr[i]; //从Object数组中取出的元素只能使用Object类型声明变量接收,如果需要其他的类型需要进行强制类型转换。

if(p.id==110){

System.out.println(p);

}

}

}

5、迭代器的作用:就是用于抓取集合中的元素。

迭代器的方法:

常用方法

解释

hasNext()

是否有元素可遍历。如果有元素遍历,返回true,否则返回false

next()

获取当前指针指向的元素并返回当前元素,然后指针向西移动一个单位

remove()

移除迭代器最后一次返回的元素

NoSuchElementException 没有元素的异常。

出现的原因: 没有元素可以被迭代了

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

public class Demo20.5{

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("狗娃");

c.add("狗剩");

c.add("铁蛋");

//遍历集合的元素------>方式一:可以使用toArray方法

Object[] arr = c.toArray(); // toArray()把集合的元素存储到一个 Object的数组中返回

for(int i = 0 ; i

System.out.print(arr[i]+",");

}

//遍历集合的元素------>方式二:使用iterator迭代器遍历Iterator it = c.iterator(); //返回一个迭代器

//疑问:iterator()方法返回的是一个接口类型,为什么接口又可以调用方法可以使用呢?

//iterator实际上返回的是iterator接口的实现类对象。

while(it.hasNext()){ // hasNext()是否有元素可以遍历

System.out.println("元素:"+ it.next()); //获取元素

}

it.next();

it.next();

it.remove(); //删除迭代器最后一次返回的元素。

//清空集合的元素

while(it.hasNext()){

it.next();

it.remove();

}

System.out.println("集合的元素:"+ c);

}

}

6、小练习:使用集合实现注册登陆功能

① 提示用户选择功能, A(注册) B(登陆) 。 要求: 功能选择 的时候要忽略大小写。

② 注册提示用户输入注册的账号(数字)与密码,如果输入账号已经存在集合中,提示用户重新输入。 注册完毕之后,把集合中的所有用户信息打印出来。

③ 登陆提示用户输入登陆的账号与密码,如果账号与密码这个用户已经存在集合中,那么登陆成功,否则登陆失败。

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

import java.util.Scanner;

//用户

class User{

int id; //账号

String password; //密码

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public User(int id, String password) {

this.id = id;

this.password = password;

}

@Override

public boolean equals(Object obj) {

User user = (User)obj;

return this.id==user.id;

}

@Override

public String toString() {

return "{ 账号:"+this.id+" 密码:"+this.password+"}";

}

}

public class Demo20.6 {

static Scanner scanner = new Scanner(System.in);

static Collection users = new ArrayList(); //使用该集合保存所有的用户信息

public static void main(String[] args) {

while(true){

System.out.println("请选择功能:A(注册)、B(登陆)");

String option = scanner.next();

if("a".equalsIgnoreCase(option)){

reg();

}else if("b".equalsIgnoreCase(option)){

login();

}else{

System.out.println("你的选择有误,请重新输入");

}

}

}

public static void login() {

System.out.println("请输入账号:");

int id = scanner.nextInt();

System.out.println("请输入密码:");

String password = scanner.next();

//判断集合的用户是否存在该用户名与密码

//遍历集合的元素,查看是否存在该用户信息

boolean isLogin = false; //定义变量用于记录是否登陆成功的信息 , 默认是没有登陆成功的

Iterator it = users.iterator();

while(it.hasNext()){

User user = (User) it.next();

if(user.id==id&&user.password.equals(password)){

//存在该用户信息,登陆成功...

isLogin = true;

}

}

if(isLogin==true){

System.out.println("欢迎登陆...");

}else{

System.out.println("用户名或者密码错误,登陆失败...");

}

}

public static void reg() {

//110 , 220

User user = null;

while(true){

System.out.println("请输入账号:");

int id = scanner.nextInt(); //220

user = new User(id,null);

if(users.contains(user)){ // contains底层依赖了equals方法。

//如果存在

System.out.println("该账号已经存在,请重新输入账号");

}else{

//不存在

break;

}

}

System.out.println("请输入密码:");

String password = scanner.next();

user.setPassword(password);

//把user对象保存到集合中

users.add(user);

System.out.println("注册成功!");

System.out.println("当前注册的人员:"+users);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值