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. 火狐中添加selenium IDE

    在火狐中添加selenium IDE 1.下载selenium IDE,此处下载的是selenium-ide-2.5.0.xpi 2.在火狐中,打开菜单-->附加组件-->用户附加组件的工 ...

  2. MQTT 协议学习:002- 通信报文的构成

    背景 之前工作中参与有关协议调试的时候,发现对于协议帧的解析是比较重要的. 参考:<MQTT协议 -- 消息报文格式>.<基于STM32实现MQTT>.<MQTT协议从服 ...

  3. 域名配置DNS解析A记录,映射到主机

    有很多域名的供应商,随便选,哪个便宜用哪个.godaddy一直支持支付宝,不用visa,虽然它是国外的. 我用的是godaddy,这两年有中文版的了,虽然它有了中文版,但是比以前的英文版还要慢. 进入 ...

  4. Docker + Maven + Docker-compose

    前言: docker:容器化管理 maven:支持docker-maven的插件,通过 mvn clean -Dmaven.test.skip package dockerfile:build 打包命 ...

  5. IDEA自用插件,驼峰插件,MyBatis插件,Lombok插件

    IDEA自用插件 驼峰插件:CamelCase,Shift + Alt + u快速切换驼峰 MyBatisX插件:快速在mapper之间跳转 Lombok插件:注解实现get.set方法 MyBati ...

  6. 2-10 就业课(2.0)-oozie:5、通过oozie执行hive的任务

    4.2.使用oozie调度我们的hive 第一步:拷贝hive的案例模板 cd /export/servers/oozie-4.1.0-cdh5.14.0 cp -ra examples/apps/h ...

  7. Stm32CubeMx lwip+freeRTOS TCP 服务

    如何添加lwip参照上一篇   stm32CubeMx lwip + freeRTOS 今天讲一下,如何添加TCP服务 LwIP 提供了三种编程接口,分别为 RAW/Callback API.NETC ...

  8. JS取整方法

    1.toFixed方法 定义:toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 例如:将数据Num保留2位小数,则表示为:toFixed(Num):但是其四舍五入的规则与数学 ...

  9. C++代做,C++编程代做,C++程序代做,留学生C++ Lab代写

    C++代做,C++编程代做,C++程序代做 我们主要面向留学生,广泛接美加澳国内港台等地编程作业代写,中英文均可. C语言代写 C++代写 Python代写 Golang代写 Java代写 一年半的时 ...

  10. Codeforces Forethought Future Cup Elimination Round 选做

    1146C Tree Diameter 题意 交互题.有一棵 \(n(n\le 100)\) 个点的树,你可以进行不超过 \(9\) 次询问,每次询问两个点集中两个不在同一点集的点的最大距离.求树的直 ...