Day 6:Vector类和实现Hashset以及登录窗口的模拟
LinkedList作业:生成扑克牌并且洗牌?
import java.util.*;
class Poker{
String color;
String number;
public Poker(String color, String number) {
super();
this.color = color;
this.number = number;
}
@Override
public String toString() {
return "{"+color+number+"}";
}
}
public class Demo1 {
public static void main(String[] args) {
LinkedList pokers = createPokers();
shufflePoker(pokers);
showPoker(pokers);
}
private static void showPoker(LinkedList pokers) {
for(int i = 0 ; i<pokers.size() ; i++){
System.out.print(pokers.get(i));
if(i%10==9){
System.out.println();
}
}
}
private static void shufflePoker(LinkedList pokers) {
Random random = new Random();
for(int i = 0;i < 100;i++) {
int index1 = random.nextInt(pokers.size());
int index2 = random.nextInt(pokers.size());
//pokers.set(index1, pokers.get(index2));
//pokers.set(index2, pokers.get(index1));
Poker poker1 = (Poker) pokers.get(index1);
Poker poker2 = (Poker) pokers.get(index2);
pokers.set(index1, poker2);
pokers.set(index2, poker1);
}
}
private static LinkedList createPokers() {
String[] colors = {"黑桃","红桃","梅花","方块"};
String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
LinkedList list = new LinkedList();
for(int i = 0 ; i < colors.length ; i++){
for(int j = 0 ; j<numbers.length ; j++){
list.add(new Poker(colors[i], numbers[j]));
}
}
return list;
}
}
题目:用集合按年龄排序,排序方法(直接排序)
import java.util.*;
class Person{
String name;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "{ 名字("+ this.name+" ),年龄("+ this.age+")}";
}
}
public class Demo2 {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add(new Person("李杰", 21));
list.add(new Person("李英", 18));
list.add(new Person("李汉三", 8));
paixu(list);
}
private static void paixu(LinkedList list) {
for(int i= 0 ; i<list.size() -1 ; i++){
for(int j = i+1 ; j<list.size() ; j++){
Person p1 = (Person) list.get(i);
Person p2 = (Person) list.get(j);
if(p1.age>p2.age){
list.set(i, p2);
list.set(j, p1);
}
}
}
System.out.println(list);
}
}
Vector :底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
笔试题: 说出ArrayLsit与Vector的区别?
相同点: ArrayList与Vector底层都是使用了Object数组实现的。
不同点:
1. ArrayList是线程不同步的,操作效率高。
Vector是线程同步的,操作效率低。
2. ArrayList是JDK1.2出现,Vector是jdk1.0的时候出现的。
package cn.itcast.list; import java.util.*;
public class Demo1 {
public static void main(String[] args) {
Vector v = new Vector();
v.addElement("李英");
v.addElement("李杰");
v.addElement("李汉三");
Enumeration e = v.elements(); //获取迭代器
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}
}
}
Set接口:实现了Set接口的集合类,具备的特点: 无序,不可重复。

因为不可重复的特点所以没有添加成功。
hashSet的实现原理:
Haset添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值 ,
然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置。
算出该元素在哈希表中的存储位置后
情况1: 如果算出元素存储的位置目前没有任何元素存储,那么该元素可以直接存储到该位置上。
情况2: 如果算出该元素的存储位置目前已经存在有其他的元素了,那么会调用该元素的equals方法与该位置的元素再比较一次
,如果equals返回的是true,那么该元素与这个位置上的元素就视为重复元素,不允许添加,
如果equals方法返回的是false,那么该元素运行添加(元素能够在判断不一致后还可以添加主要是因为哈希表的一个存储位置存的是一个数组空间,就像二维数组一样)
import java.util.HashSet;
import javax.print.attribute.HashAttributeSet; class Person1{
int id;
String name; public Person1(int id, String name) {
super();
this.id = id;
this.name = name;
} @Override
public String toString() {
return "{ 编号:"+ this.id+" 姓名:"+ this.name+"}";
} @Override
public int hashCode() {
return this.id;
} @Override
public boolean equals(Object obj) {
Person1 p = (Person1)obj;
return this.id==p.id;
}
} public class Demo4 { public static void main(String[] args) {
HashSet set = new HashSet();
set.add(new Person1(110,"李杰"));
set.add(new Person1(220,"李英"));
set.add(new Person1(330,"李汉三"));
System.out.println("添加成功吗?"+set.add(new Person1(110,"李杰")));
System.out.println("集合的元素:"+set);
}
}
这个代码中HashCode调用了4次,equals调用一次,因为重写两个方法后,只有当HashCode返回值相同时才会调用equals
登陆程序窗口重做
import java.util.ArrayList;
import java.util.Collection; public class windows {
static Collection <databaseku> collection = new ArrayList(); public static void main(String[] args) {
new loginWindows();
}
}
import java.awt.*;
import javax.swing.*;
import java.awt.Event.*;
import java.awt.event.ActionListener; public class loginWindows extends JFrame {
static 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 listener = new messageListener(); public loginWindows() {
setBounds(100,100,400,250);
setVisible(true);
setTitle("QQ_Design_by_杰");
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(listener);
signjb.addActionListener(listener);
}
}
import java.awt.Event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
import javax.swing.JOptionPane; class databaseku {
String account;
String password; public String getaccount() {
return account;
} public void setaccount(String account) {
this.account = account;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public databaseku(String account, String password) {
this.account = account;
this.password = password;
} @Override
public boolean equals(Object obj) {
databaseku user = (databaseku)obj;
return this.account == user.account;
} public String toString() {
return "{ 账号:"+this.account+" 密码:"+this.password+"}";
} public void setAccount(String account) {
this.account = account;
}
} public class messageListener implements ActionListener{ public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
databaseku value=null;
Iterator it=windows.collection.iterator();
String account0 = loginWindows.accountjt.getText();
String password0 = loginWindows.accountjt.getText();
String buttonName = e.getActionCommand(); if(buttonName.equals("登陆")){
while(it.hasNext()) {
value=(databaseku)it.next();
if(value.getaccount().equals(account0) && value.getPassword().equals(password0)) {
JOptionPane.showMessageDialog(null, "欢迎登陆...");
}
else{
JOptionPane.showMessageDialog(null, "用户名或者密码错误或者该用户不存在,登陆失败...");
}
}
}
if(buttonName.equals("注册")){
boolean flag=true;
while(it.hasNext()){
value=(databaseku)it.next();
if(windows.collection.contains(value)){
flag=false;
break;
}
}if(flag==false){
JOptionPane.showMessageDialog(null, "该账号已经存在,请重新输入账号");
}else{
windows.collection.add(new databaseku(account0, password0));
JOptionPane.showMessageDialog(null, "注册成功!");
JOptionPane.showMessageDialog(null, "当前注册的人员:"+windows.collection);
}
}
}
}
(6(PF%7D[E%60$FZN%607[D.png)







Day 6:Vector类和实现Hashset以及登录窗口的模拟的更多相关文章
- Java中ArrayList,Vector,LinkedList,HashMap,HashTable,HashSet对比及总结
1.所有的集合的父类都是Collection的接口 2.Set List Map 区别 A 在Set里面:无法添加元素的顺序,所以Set里面的元素不能重复 B 在List中:有索引号,类似于数组, ...
- Java API —— ArrayList类 & Vector类 & LinkList类
1.ArrayList类 1)ArrayList类概述 · 底层数据结构是数组,查询快,增删慢 · 线程不安全,效率高 2)ArrayList案例 ...
- 转载:C++ vector 类学习笔记
声明:本文转载自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机 ...
- Java Vector 类
Vector类实现了一个动态数组.和ArrayList和相似,但是两者是不同的: Vector是同步访问的. Vector包含了许多传统的方法,这些方法不属于集合框架. Vector主要用在事先不知道 ...
- 五:Java之Vector类专题
据说期末考试要考到Vector 这个类,出于复习须要在这里就要好好整理下这个类了. 一.基本概念 Vector 是可实现自己主动增长的对象数组. java.util.vector提供了向量类(vect ...
- 谈一谈Vector类
一.关于Vector类的注意事项 1.从 Java 2 平台 v1.2 开始,vector类改进为实现 List 接口,成为 Java Collections Framework 的成员:所以vect ...
- 面试:vector类的简单实现
vector类的简单实现 #include <vector> #include <iostream> #include <cstring> #include < ...
- 【stanford C++】容器III——Vector类
主要介绍如下5个容器类——Vector, Stack,Queue,Map和Set,各个都表示一重要的抽象数据类型.另外,各个类都是一些简单类型的值的集合,所以称它们为容器类. 暂且我们先不需要知道它们 ...
- vector类转换Mat类
前言 一个个数据push back到vector之后,可以使用Mat()函数将vector类型转换为Mat类型. 在opencv中Mat类的构造函数中有一个构造函数可以直接把vector类转换为Mat ...
随机推荐
- NO20文件属性--inode--block-企业场景题
壹 Linux文件属性描述:在Linux里一切皆文件Linux系统中的文件或目录的属性主要包括:索引节点(inode).文件类型.权限属性.链接数.所归属的用户和用户组.最近修改时间等内容. 例子: ...
- Jmeter测试入门——分析HBase访问服务性能瓶颈
开启HBase服务 新建线程组,设定线程数为10: 设定请求方法和请求参数: 查看请求的返回结果: 查看服务响应的性能分析结果: 可能出问题的地方:Phoenix.数据库连接池(操作Phoenix)
- 第1课 VMware的NSX全面落地软件定义网络SDN
SDN的定义: 即软件定义网络(Software Defined Network)的缩写,它是一种基于网络架构的创新,一种在已存在物理传输网络之上的抽象形态,它是一种体系结构,它是众多网络虚拟化技术中 ...
- Java集合基于JDK1.8的LinkedList源码分析
上篇我们分析了ArrayList的底层实现,知道了ArrayList底层是基于数组实现的,因此具有查找修改快而插入删除慢的特点.本篇介绍的LinkedList是List接口的另一种实现,它的底层是基于 ...
- C语言中语句的跨行支持总结
C语言中语句的跨行支持总结: 预处理一行写不下: 把一个预处理指示写成多行要用""续行,因为根据定义,一条预处理指示只能由一个逻辑代码行组成. 正常程序一行写不下: 把C代码写成多 ...
- Tips for traing DNN
1. 一般的机器学习方法不会在train好的模型上检查training data的结果,因为DNN在training data上都没有办法获得很好的正确率, 所以要先回头看一下要对模型做什么修改, ...
- redis简单的实现(java)
1.首先新建一个maven项目,在pom.xml中添加依赖 <dependency> <groupId>redis.clients</groupId> <ar ...
- 剑指offer自学系列(二)
题目描述: 在一个长度为n的数组里的所有数字都在0到n-1的范围内,数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次,请找出数组中任一个重复的数字,例如,如果输入长度为7的 ...
- asp.net mvc邮箱激活
1.发送邮件 public ActionResult SendEmail() { var member = dbSession.MemberRepository.LoadEntities(p => ...
- .NET配置问题
Ext.NET MVC 配置问题总结 随着VS版本和.NET MVC版本.EF的版本的不断更新,虽然很多功能随着版本的提升而更完善,但对于旧版本开发的软件就有点悲催了,或许很多开发者都遇到 ...