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 ...
随机推荐
- Problem A: Assembly Required K路归并
Problem A: Assembly Required Princess Lucy broke her old reading lamp, and needs a new one. The cast ...
- SpringCloud实战——(1)创建SpringCloud项目
首先创建一个SpirngCloud工程,并添加公用依赖. <?xml version="1.0" encoding="UTF-8"?> <pr ...
- springboot2.1以javabean整合rabbitmq及自动注入rabbitmqTemplate为空问题
springboot集成rabbitmq之前也写过,这次再来个总结,总体来讲比较简单 主要就是配置属性文件,将属性以javabean的形式注入,配置工厂,对象等原来以xml<bean>形式 ...
- 037、Java中利用判断语句实现三目运算的功能
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- eshop6-nginx
1. Nginx 是什么? Nginx 是一款轻量级Web服务器,也是一款反向代理服务器 2. Nginx 能干什么 可以直接支持Rails 和PHP 程序 可以作为HTTP反向代理 作为负载均衡服务 ...
- mysql sql语句不同平台上大小写区分
- Netty 模型
Demo代码 使用Maven的话请在pom.xml中注入netty依赖 <!-- https://mvnrepository.com/artifact/io.netty/netty-all -- ...
- 十五、React:简单点餐实例:知识点,html解析写法
一.功能 从首页列表点进去,转到详情页 列表.详情从Api获取 Api列表:http://a.itying.com/api/productlist 详情:http://a.itying.com/api ...
- UVA - 548 Tree(二叉树的递归遍历)
题意:已知中序后序序列,求一个叶子到根路径上权和最小,如果多解,则叶子权值尽量小. 分析:已知中序后序建树,再dfs求从根到各叶子的权和比较大小 #include<cstdio> #inc ...
- uniapp 小程序实现自定义底部导航栏(tarbar)
在小程序开发中,默认底部导航栏很难满足实际需求,好在官方给出了自定义形式,效果如下: 话不多说,直接上代码 1.组件 custom-tarbar.vue文件 <template> < ...