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);
}
}
}
}




Day 6:Vector类和实现Hashset以及登录窗口的模拟的更多相关文章

  1. Java中ArrayList,Vector,LinkedList,HashMap,HashTable,HashSet对比及总结

    1.所有的集合的父类都是Collection的接口 2.Set List Map 区别 A  在Set里面:无法添加元素的顺序,所以Set里面的元素不能重复 B  在List中:有索引号,类似于数组, ...

  2. Java API —— ArrayList类 & Vector类 & LinkList类

    1.ArrayList类     1)ArrayList类概述         · 底层数据结构是数组,查询快,增删慢         · 线程不安全,效率高     2)ArrayList案例   ...

  3. 转载:C++ vector 类学习笔记

    声明:本文转载自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机 ...

  4. Java Vector 类

    Vector类实现了一个动态数组.和ArrayList和相似,但是两者是不同的: Vector是同步访问的. Vector包含了许多传统的方法,这些方法不属于集合框架. Vector主要用在事先不知道 ...

  5. 五:Java之Vector类专题

    据说期末考试要考到Vector 这个类,出于复习须要在这里就要好好整理下这个类了. 一.基本概念 Vector 是可实现自己主动增长的对象数组. java.util.vector提供了向量类(vect ...

  6. 谈一谈Vector类

    一.关于Vector类的注意事项 1.从 Java 2 平台 v1.2 开始,vector类改进为实现 List 接口,成为 Java Collections Framework 的成员:所以vect ...

  7. 面试:vector类的简单实现

    vector类的简单实现 #include <vector> #include <iostream> #include <cstring> #include < ...

  8. 【stanford C++】容器III——Vector类

    主要介绍如下5个容器类——Vector, Stack,Queue,Map和Set,各个都表示一重要的抽象数据类型.另外,各个类都是一些简单类型的值的集合,所以称它们为容器类. 暂且我们先不需要知道它们 ...

  9. vector类转换Mat类

    前言 一个个数据push back到vector之后,可以使用Mat()函数将vector类型转换为Mat类型. 在opencv中Mat类的构造函数中有一个构造函数可以直接把vector类转换为Mat ...

随机推荐

  1. KMP【模板】 && 洛谷 P3375

    题目传送门 解题思路: 首先说KMP的作用:对于两个字符串A,B(A.size() > B.size()),求B是否是A的一个字串或B在A里的位置或A里有几个B,说白了就是字符串匹配. 下面创设 ...

  2. R分析实现对招聘网站薪资预测分析

    1.首先确定数据分析目标——薪酬受哪些因素影响 确定变量: 因变量:薪资 自变量:(定性)-- 公司类别.公司规模.地区.行业类别.学历要求.软件要求. (定量)-- 经验要求(数值型) 分析目标:建 ...

  3. 基于LAMP实现后台活动发布和前端扫码签到系统

    目的 无论是公司.学校和社会团体,都会举办各式各样的活动,比如运动会.部门会议.项目会议.野炊.团建等.作为团队管理者来讲,当然希望能够把这类活动转移到线上形成完整的系统,类似于电子流的形式.本文以学 ...

  4. XV6源代码阅读-同步机制

    Exercise1 源代码阅读 锁部分:spinlock.h/spinlock.c以及相关其他文件代码 // Mutual exclusion lock. struct spinlock { uint ...

  5. tomcat多实例配置

    有一台server上跑个tomcat的实例的情况,我遇到过这种情况,毕竟把多个应用部署到一个实例中,如果某个应用出了问题,导致tomcat奔溃,其他应用也gg了.闲话到此. 通常部署多实例就是解压多个 ...

  6. 关于dom树

    当用户访问ip地址,比如 ==www. aa .com/bb/cc/dd.html== 正常情况下是访问一个叫aa.com的服务器里的bb文件夹里的cc文件夹里的dd.html这个文件(其实很多情况都 ...

  7. Windows下 dmp文件的产生

    一.windows下的崩溃捕获windows程序当遇到异常,没有try-catch或者try-catch也无法捕获到的异常时,程序就会自动退出.windows系统默认是不产生程序dmp文件的.dump ...

  8. memortstream Base64编码和filestream base64编码不同

    memorystream base64 function BaseImage(fn: string): string; var   m1: TMemoryStream;   m2: TStringSt ...

  9. CSS隐藏商务通等内容

    CSS隐藏商务通等内容<style>#qiao-wrap{display:none !important;} </style>

  10. 剑指offer自学系列(二)

    题目描述: 在一个长度为n的数组里的所有数字都在0到n-1的范围内,数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次,请找出数组中任一个重复的数字,例如,如果输入长度为7的 ...