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 ...
随机推荐
- MyEclipse8.5 + jdk 1.6.0_43 + tomcat6 + maven 3.0.4 + win7 32位 ,环境搭建并看到“hello world”
一.前期准备 1.首先安装jdk,具体略,用java -version在cmd中看到下图所示就说明安装好了 2.安装tomcat6,具体略,在浏览器中输入http://localhost:8080/, ...
- 利用uboot下载引导Kernel(TFTP)以及挂载网络Rootfs(NFS)
背景: 在嵌入式开发中,经常需要对系统的各个部分进行修改.倘若每次修改都烧写到板子中,一来浪费时间,其次影响存储介质寿命. 所以,需要一些手段来避免此类问题. 概览: 编译uboot 将uboot写入 ...
- PAT (Advanced Level) 1128~1131:1128N皇后 1129 模拟推荐系统(set<Node>优化) 1130 中缀表达式
1128 N Queens Puzzle(20 分) 题意:N皇后问题.按列依次给定N个皇后的行号,问N个皇后是否能同时不存在行冲突.列冲突和主副对角线冲突. 分析: 1.根据题意一定不存在列冲突,所 ...
- express 配置 https 服务 ( 以阿里云服务器为例), 探索一周终于搞定
首先最重要的是 你要明白 https接口的接收或者发送 的形式 是 https://域名:端口号 而不是 https://ip:端口号 一,首先,去阿里云注册免费ssl证书 1,在搜索框 ...
- Day7 - G - Divisors POJ - 2992
Your task in this problem is to determine the number of divisors of Cnk. Just for fun -- or do you n ...
- 爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline
1. Spider Middleware Spider Middleware是介入到Scrapy的Spider处理机制的钩子框架. 当Downloader生成Response之后,Response会被 ...
- 058、Java中定义一个没有参数没有返回值的方法
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 055、Java中使用for循环输出乘法口诀表
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- mysql 分组查询入门
- 使用conda创建虚拟环境
conda创建python虚拟环境 前言 conda常用的命令: conda list 查看安装了哪些包. conda env list 或 conda info -e 查看当前存在哪些虚拟环境 co ...