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 ...
随机推荐
- JavaScript 空白符(分隔符)
分隔符(空白符)就是各种不可见字符的集合,如空格(\u0020).水平制表符(\u0009).垂直制表符(\u000B).换页符(\u000C).不中断空白(\u00A0).字节序标记(\uFEFF) ...
- CentOS7 环境下 在Hadoop集群安装Hive
1.下载Hive的tar.gz包:http://mirror.bit.edu.cn/apache/hive/ 2.放入CentOS 7 系统中并解压:tar -zxvf apache-hive-2.3 ...
- vscode修改样式
以修改上方滚动条宽度为例 打开开发者工具 help->toggle developer tool 或者快捷键 ctrl+shift+i 选择滚动条,找到css对应文件 鼠标移上去可以看到路径,类 ...
- 新闻网大数据实时分析可视化系统项目——19、Spark Streaming实时数据分析
1.Spark Streaming功能介绍 1)定义 Spark Streaming is an extension of the core Spark API that enables scalab ...
- C++编程学习(十二) STL
一.简介 标准模板库STL,是一组模板类和函数.提供了: 1.容器.用于存储信息. 2.迭代器.用于访问容器中的信息. 3.算法.操作容器内容. 1.容器 STL有两种类型的容器类: (1)顺序容器 ...
- 012.CI4框架CodeIgniter, 加载并调用自己的Libraries库
01. 在Libraries目录创建一个Mylib文件,内容是一个简单的类 <?php namespace App\Controllers; class Home extends BaseCon ...
- Educational Codeforces Round 65 选做
好久没更博客了,随便水一篇 E. Range Deleting 题意 给你一个长度为 \(n\) 的序列 \(a_1,a_2,\dots a_n\) ,定义 \(f(l,r)\) 为删除 \(l\le ...
- Python中语法糖及带参语法糖
在python中,@符号常被称作语法糖(装饰器),在某函数定义时,用以包装该函数,以达到截取,控制该函数的目的. def d(f): print('d...') k=f #此处保留了传进来的原函数 f ...
- python-处理json、处理时间
1.处理json:import json #json串就是字符串. d = { 'car1':{'color':'red','price':100,'count':50}, 'car2':{'colo ...
- UVA - 12166 Equilibrium Mobile (修改天平)(dfs字符串表示的二叉树)
题意:问使天平平衡需要改动的最少的叶子结点重量的个数. 分析:天平达到平衡总会有个重量,这个重量可以由某个叶子结点的重量和深度直接决定. 如下例子: 假设根结点深度为0,结点6深度为1,若以该结点为基 ...