Day 3:集合
数组: 存储同一种数据类型的集合容器
数组的特点:
1. 只能存储同一种数据类型的数据。
2. 一旦初始化,长度固定。
3. 数组中的元素与元素之间的内存地址是连续的。
注意: Object类型的数组可以存储任意类型的数据。
集合:集合是存储对象数据的集合容器。
-------------------------------------------------------------------------------------
集合比数组的优势:
1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。
2. 集合的长度是会发生变化的,数组的长度是固定的。
-------------------------------------------------------------------------------------
Collection 单例集合的跟接口。
List : 如果是实现了List接口的集合类,具备的特点: 有序,可重复。
Set :如果是实现了Set接口的集合类,具备特点: 无序,不可重复。
-------------------------------------------------------------------------------------
Collection接口中的方法分类:
增加:1.add(E e) 添加成功返回true,添加 失败返回false.
2.addAll(Collection c) 把一个集合 的元素添加到另外一个集合中去。
删除:1.clear()
2.remove(Object o)
3.removeAll(Collection c)
4.retainAll(Collection c)
查看:1.size()
//实验Collection中的所有方法
import java.util.*;
public class Demo1 {
public static void main(String[] args) {
Collection collection = new ArrayList();
//添加
collection.add("李杰");
collection.add('L');
collection.add('O');
collection.add('V');
collection.add('E');
System.out.println("添加成功,元素是:"+collection);
System.out.println("是否添加成功?"+collection.add("小姐姐李英"));
System.out.println("元素是:"+collection);
Collection collection1 = new ArrayList();
collection1.add("3344179");
System.out.println("是否添加成功?"+collection.addAll(collection1));
System.out.println("元素是:"+collection);
System.out.println("元素是:"+collection1);//虽然添加进去了但是还存在
//删除
/*
collection1.clear();
System.out.println("元素是:"+collection1);
collection1.remove("3344179");
System.out.println("元素是:"+collection);
System.out.println("元素是:"+collection1);
collection.remove("3344179");
System.out.println("元素是:"+collection);
collection.removeAll(collection1);//删除collection中与collection1的交集元素
collection.retainAll(collection1);//保留交集元素,其他非交集元素删除
*/
//查找
System.out.println(collection.size());
//判断
System.out.println(collection.isEmpty());
System.out.println(collection.contains("3344179"));
System.out.println(collection.contains(collection1));//contains()括号中为元素
System.out.println(collection.containsAll(collection1));
}
}
判断:1.isEmpty()
2.contains(Object o) //调用参数的equals()
3.containsAll(Collection<?> c)
//实验Collection中的所有方法
import java.util.*; //自定义数据类型
class person{
int id;
String name; public person(int id,String name) {
this.id = id;
this.name = name;
} @Override
public String toString() {
// TODO Auto-generated method stub
return "{"+this.id+"、"+this.name+"}";
} @Override
public boolean equals(Object arg0) {
person p = (person)arg0;
return this.id == p.id;
} @Override
public int hashCode() {//java规范: 一般重写equlas方法我们都会重写hashCode方法的。
return this.id;
}
} public class Demo2 { public static void main(String[] args) {
Collection collection = new ArrayList();
Collection collection1 = new ArrayList();
collection.add(new person(14,"李杰 "));
collection.add(new person(17,"李英 ")); System.out.println("集合的元素:"+ collection);
collection1.addAll(collection);
System.out.println("集合1的元素:"+ collection1); System.out.println(collection.contains(new person(17,"李英")));
System.out.println("集合的元素:"+ collection);
System.out.println(collection.containsAll(collection1));
} }
Q:上述为什么重写equals和hashCode方法
A:ArrayList类的contains方法中仅仅只是依靠equals方法进行判断内容是否相符,而equals方法默认情况下(未重写情况下)是比较的是引用(引用指的是)
①对于基本数据类型,两者进行等价判断时判断的是基本类型的值,只要值相等,那么判断结果就为真;
②对于引用型数据,“==”比较的是对象的hashcode编码,也就是在内存中的位置,即是否为同一个对象,如果是同一个则为真;而默认的“equals()”则在比较一些特定的引用类型上(如String,File,Date以及封装类型)数据时,只要两个对象的类型相同且内容相等(对象各自封转的属性值对应相等),那么该方法就判断为真。所以,我们在使用的时候就要考虑我们要比较的是内容相同还是对象相同。例如反射时比较String字节码对象时,判断是否为同一个字节码用“==”,而不用“equals()”。但是我们一但重写了“equals()”,改变了它的判断标准,那么我们就要根据具体情况来看了。
迭代:1.toArray()
2.iterator()
//实验Collection中的所有方法
import java.lang.reflect.Array;
import java.util.*; public class Demo3 { public static void main(String[] args) {
Collection collection = new ArrayList();
collection.add("李杰");
collection.add('L');
collection.add('O');
collection.add('V');
collection.add('E');
collection.add("小姐姐李英"); Object[] obj = collection.toArray();
System.out.println("obj接收到的元素是:"+Arrays.toString(obj));
}
}
toArray方法之所以返回Object类型的数组,是应为集合装载的是任意类型的元素,只有Object类型的数组可以接收。
作业2:使用集合实现注册登陆功能,
第一步:提示用户选择功能, A(注册) B(登陆) 。 要求: 功能选择 的时候要忽略大小写。
注册:提示用户输入注册的账号(数字)与密码,如果输入的id号已经存在集合中,提示用户重新输入。 注册完毕之后,把集合中的所有用户信息打印出来。(使用:toArrry()方法)
登陆: 提示用户输入登陆的账号与密码,如果账号与密码这个用户已经存在集合中,那么登陆成功,否则登陆失败。
import java.util.*;
class User{
int account;
String password;
public int getaccount() {
return account;
}
public void setaccount(int account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(int account, String password) {
this.account = account;
this.password = password;
}
@Override
public boolean equals(Object obj) {
User user = (User)obj;
return this.account == user.account;
}
@Override
public int hashCode() {
return this.account;
}
@Override
public String toString() {
return "{ 账号:"+this.account+" 密码:"+this.password+"}";
}
}
public class Demo4 {
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)){
User user = null;
while(true){
System.out.println("请输入账号:");
int id = scanner.nextInt();
user = new User(id,null);
if(users.contains(user)){
System.out.println("该账号已经存在,请重新输入账号");
}else{
break;
}
}
System.out.println("请输入密码:");
String password = scanner.next();
user.setPassword(password);
users.add(user);
System.out.println("注册成功!");
System.out.println("当前注册的人员:"+users);
}else if("b".equalsIgnoreCase(option)){
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.account==id&&user.password.equals(password)){
isLogin = true;
}
}
if(isLogin==true){
System.out.println("欢迎登陆...");
}else{
System.out.println("用户名或者密码错误,登陆失败...");
}
}
}
}
}
窗口设计
import java.awt.*;
import javax.swing.*;
import java.awt.Event.*; public class loginWindows extends JFrame {
JTextField accountjt = new JTextField(10);
JPasswordField passwordjt = new JPasswordField(10); JLabel accountjl = new JLabel("用户名:");
JLabel passwordjl = new JLabel("密 码:"); JButton loginjb = new JButton("登录");
JButton signjb = new JButton("注册"); messageListener police = new messageListener(); public loginWindows() {
setBounds(100,100,400,250);
setVisible(true);
setTitle("QQ");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
init();
} private void init() {
setLayout(null);
Container con=getContentPane(); accountjl.setBounds(70,15,100,60);
accountjt.setBounds(135,30,150,25); passwordjl.setBounds(70,50,100,60);
passwordjt.setBounds(135,65,150,25); loginjb.setBounds(100,130,70,35);
signjb.setBounds(200,130,70,35); con.add(accountjl);
con.add(accountjt);
con.add(passwordjl);
con.add(passwordjt);
con.add(loginjb);
con.add(signjb); loginjb.addActionListener(police);
signjb.addActionListener(police);
accountjt.addActionListener(police);
passwordjt.addActionListener(police);
}
}
public class windows {
public static void main(String[] args) {
new loginWindows();
}
}
窗口效果

功能暂未实现等我事件处理补补课再说各位!!!
Day 3:集合的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- .Net多线程编程—并发集合
并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
- java基础_集合List与Set接口
List接口继承了Collection的方法 当然也有自己特有的方法向指定位置添加元素 add(索引,添加的元素); 移除指定索引的元素 remove(索引) 修改指定索引的元素 set ...
- Java基础Collection集合
1.Collection是所有集合的父类,在JDK1.5之后又加入了Iterable超级类(可以不用了解) 2.学习集合从Collection开始,所有集合都继承了他的方法 集合结构如图:
- 轻量级“集合”迭代器-Generator
Generator是PHP 5.5加入的新语言特性.但是,它似乎并没有被很多PHP开发者广泛采用.因此,在我们了解PHP 7对Generator的改进之前,我们先通过一个简单却显而易见的例子来了解下G ...
- Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合
今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...
- 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)
在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台 ...
- python 数据类型 --- 集合
1. 注意列表和集合的区别 set 列表表现形式: list_1 = [1,3,4]; 集合表现形式:set_1= set() list_1 = [1,2,3,4,23,4,2] print(lis ...
随机推荐
- 第1节 IMPALA:10、基本查询语法;11、数据加载的4种方式
9.3. 创建数据库表 创建student表 CREATE TABLE IF NOT EXISTS mydb1.student (name STRING, age INT, contact INT ) ...
- 看雪hello
在看雪做了一道题目很简单,但是还是记录一下自己的学习. 用ida打开,然后shift+F12查看 这里可以看到基本的结构,转到pass查看 发现ATA XREF: sub_401770+Bo打开这里 ...
- iOS中html打开APP传参
1.在项目info.plist中添加URL Types以供html调用 2.html代码 <html> <head lang="en"> <meta ...
- Day5-T1
原题目 小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿.为了省事,小月言想切最少的刀数,使这n根火腿分成均等的m份.请问最少要切几刀? 第一行一 ...
- XmlBeanDefinitionReader
- 2. react 简书 头部(header) 图标添加
1. 访问 iconfont 并注册 登陆 2. 进入 iconfont 头部 图标管理->我的项目 3. 点击右边的文件夹 + 号 图标 创建我的项目 输入项目名称即可 4.在 搜索框 搜索 ...
- Java笔记--网络编程
1.IP地址:InetAddress类 --唯一的标识Internet上的计算机 --本地回环地址(hostAddress)127.0.0.1 主机名(hostName):localhost //根据 ...
- es和数据类型
js=es+dom+bom,dom和bom前面已经讲完了 es是js的本体,是指数据类型,和对于数据的操作手段,他的版本更新得很快 这些功能不是html文件提供的,也不是浏览器提供的,即使脱离了dom ...
- [题解] LuoguP4091 [HEOI2016/TJOI2016]求和
传送门 首先我们来看一下怎么求\(S(m,n)\). 注意到第二类斯特林数的组合意义就是将\(m\)个不同的物品放到\(n\)个没有区别的盒子里,不允许有空盒子的方案数. 那么将\(m\)个不同的物品 ...
- 微信小程序学习开发笔记
首先注册小程序开账号,下载开发工具之后,先啃官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ ,把小程序的基本的代码框架 ...