Homework20191112

课堂作业:

1./*练习:比较Vector\ArrayList\LinkedList在头部增删元素的效率和查找头部元素的效率

提示:用System.currentTimeMillis()计算时间差*/

/*运行结果:

6

6

0

5

6

0

0

0

0*///(可能不太一致,但emmm链表真的快)

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.Vector;

public class Demo01 {

 

public static void main(String[] args) {

Vector vector = new Vector();

ArrayList arrayList = new ArrayList();

LinkedList linkedList = new LinkedList();

 

for(long n = 1; n <= 10000000; n++) {

vector.add(n);

arrayList.add(n);

linkedList.add(n);

}

 

System.out.println(vectorAdd(vector));

System.out.println(vectorRemove(vector));

System.out.println(vectorGet(vector));

 

 

System.out.println(arrayListAdd(arrayList));

System.out.println(arrayListRemove(arrayList));

System.out.println(arrayListGet(arrayList));

 

System.out.println(linkedListAdd(linkedList));

System.out.println(linkedListRemove(linkedList));

System.out.println(linkedListGet(linkedList));

 

 

}

 

private static long vectorRemove(Vector vector) {

//Vector在头部删除元素

long t1 = System.currentTimeMillis();

vector.remove(0);

long t2 = System.currentTimeMillis();

return t2 - t1;

}

 

private static long vectorAdd(Vector vector) {

//Vector在头部增加元素

long t1 = System.currentTimeMillis();

vector.add(0, 2);

long t2 = System.currentTimeMillis();

return t2 - t1;

}

 

private static long vectorGet(Vector vector) {

//Verctor查找头部元素

long t1 = System.currentTimeMillis();

vector.get(0);

long t2 = System.currentTimeMillis();

return t2 - t1;

}

 

 

private static long arrayListRemove(ArrayList arrayList) {

//ArrayList在头部删除元素

long t1 = System.currentTimeMillis();

arrayList.remove(0);

long t2 = System.currentTimeMillis();

return t2 - t1;

}

 

private static long arrayListAdd(ArrayList arrayList) {

//ArrayList在头部增加元素

long t1 = System.currentTimeMillis();

arrayList.add(0, 2);

long t2 = System.currentTimeMillis();

return t2 - t1;

}

 

private static long arrayListGet(ArrayList arrayList) {

//ArrayList查找头部元素

long t1 = System.currentTimeMillis();

arrayList.get(0);

long t2 = System.currentTimeMillis();

return t2 - t1;

}

 

 

 

private static long linkedListRemove(LinkedList linkedList) {

//LinkedList在头部删除元素

long t1 = System.currentTimeMillis();

linkedList.remove(0);

long t2 = System.currentTimeMillis();

return t2 - t1;

}

 

private static long linkedListAdd(LinkedList linkedList) {

//LinkedList在头部增加元素

long t1 = System.currentTimeMillis();

linkedList.add(0, 2);

long t2 = System.currentTimeMillis();

return t2 - t1;

}

 

private static long linkedListGet(LinkedList linkedList) {

//LinkedList查找头部元素

long t1 = System.currentTimeMillis();

linkedList.get(0);

long t2 = System.currentTimeMillis();

return t2 - t1;

}

}

 

2./*随机生成十个二十到四十之间的随机数,存储在合适的集合中,并且进行遍历

键盘录入一个字符串,输出其中的字符,相同的字符只输出一次.*/

 

import java.util.HashSet;

import java.util.Iterator;

import java.util.Random;

import java.util.Scanner;

public class Demo02 {

 

public static void main(String[] args) {

test01HashSet();

test02HashSet();

 

}

 

private static void test02HashSet() {

System.out.println("************");

Scanner sc = new Scanner(System.in);

System.out.println("请录入一个字符串:");

String line = sc.nextLine();

HashSet hs = new HashSet();

char[] chs = line.toCharArray();

for(int n = 0; n < chs.length; n++) {

hs.add(chs[n]);

}

Iterator iterator = hs.iterator();

while(iterator.hasNext()) {

System.out.println(iterator.next());

}

}

 

private static void test01HashSet() {

Random r = new Random();

HashSet hs = new HashSet();

while(hs.size() < 10) {

int num = r.nextInt(21) + 20;

hs.add(num);

}

 

Iterator iterator = hs.iterator();

while(iterator.hasNext()) {

System.out.println(iterator.next());

}

}

 

}

 

3.1 /*模拟栈和队列的操作(封装成集合,最好用LinkedList)

栈:先进后出(添加和删除的方法) 为空(自定义异常)

队列:先进先出(添加和删除的方法)*/

import java.awt.List;

import java.util.LinkedList;

 

public class Demo03 {

 

public static void main(String[] args) {

MyStack ms = new MyStack();

//模拟进栈

ms.in("a");

ms.in("b");

ms.in("c");

ms.in("d");

 

while(!ms.isEmpty()) { // 为空判断,不为空就弹栈

System.out.println(ms.out()); //模拟弹栈

}

 

}

 

}

 

 

class MyStack{

private LinkedList list = new LinkedList();

 

//模拟进栈

public void in(Object obj) {

list.addLast(obj);

}

 

//模拟出栈

public Object out() {

return list.removeLast();

}

 

//判断是否为空

public boolean isEmpty() {

return list.isEmpty();

}

 

}

3.2/*模拟栈和队列的操作(封装成集合,最好用LinkedList)

栈:先进后出(添加和删除的方法) 为空(自定义异常)

队列:先进先出(添加和删除的方法)*/

队列

import java.util.LinkedList;

public class Demo032 {

 

public static void main(String[] args) {

MyQueue mq = new MyQueue();

//模拟进队列

mq.in(1);

mq.in(2);

mq.in(3);

mq.in(4);

while(!mq.isEmpty()) {//为空判断,不为空就出队列

System.out.println(mq.out());//模拟出队列

}

 

}

 

}

 

class MyQueue{

private LinkedList list = new LinkedList();

//模拟进队列

public void in(Object obj) {

list.addLast(obj);

}

//模拟出队列

public Object out() {

return list.removeFirst();

}

//判断是否为空

public boolean isEmpty() {

return list.isEmpty();

}

 

}

作业

1./*分析以下需求,并用代码实现:

(1)有如下代码:

List<String> list = new ArrayList<>();

 

list.add("a");

list.add("a");

list.add("a");

list.add("b");

list.add("b");

list.add("c");

list.add("d");

list.add("d");

list.add("d");

list.add("d");

list.add("d");

 

System.out.println(frequency(list, "a")); // 3

System.out.println(frequency(list, "b")); // 2

System.out.println(frequency(list, "c")); // 1

System.out.println(frequency(list, "d")); // 5

System.out.println(frequency(list, "xxx")); // 0

  1. 定义方法统计集合中指定元素出现的次数,如"a" 3,"b" 2,"c" 1*/

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

 

public class Test01 {

 

public static void main(String[] args) {

List<String> list = new ArrayList<>();

 

list.add("a");

list.add("a");

list.add("a");

list.add("b");

list.add("b");

list.add("c");

list.add("d");

list.add("d");

list.add("d");

list.add("d");

list.add("d");

 

System.out.println(frequency(list, "a")); // 3

System.out.println(frequency(list, "b")); // 2

System.out.println(frequency(list, "c")); // 1

System.out.println(frequency(list, "d")); // 5

System.out.println(frequency(list, "xxx")); // 0

 

}

 

private static int frequency(List list, String string) {

int count = 0;

Iterator iterator = list.iterator();

while(iterator.hasNext()) {

if(iterator.next().equals(string))

count++;

}

return count;

}

 

}

 

 

2./*分析以下需求,并用代码实现:

(1)生成10个1至100之间的随机整数(不能重复),存入一个List集合

(2)编写方法对List集合进行排序

(2)然后利用迭代器遍历集合元素并输出

(3)如:15 18 20 40 46 60 65 70 75 91*/

 

import java.util.ArrayList;

import java.util.HashSet;

import java.util.Iterator;

import java.util.List;

import java.util.Random;

 

public class Test02 {

 

public static void main(String[] args) {

Random r = new Random();

HashSet hs = new HashSet();

while(hs.size()<10) {

int num = r.nextInt(100)+1;

hs.add(num);

}

List list = new ArrayList();

list.addAll(hs);

sortList(list);

Iterator iterator = list.iterator();

while(iterator.hasNext()) {

System.out.println(iterator.next());

}

/*for(int n = 0; n < list.size()-1;n++) {

System.out.println(list.get(n));

}*/

 

}

 

private static void sortList(List list) {

list.sort(null);

//默认升序,调换的话需要实现comparable接口,重写compareTo方法

}

 

}

 

3. /*编写一个类Book,具有name,price,press,author

然后创建5个对象放入ArrayList中,并实现按照price大小排序,

然后遍历ArrayList输出每个Book对象, 使用toString 方法打印。*/

 

import java.util.ArrayList;

import java.util.Comparator;

public class Test03 {

 

public static void main(String[] args) {

Book book1 = new Book("活着1",26.00,"作家出版社1","余华1");

Book book2 = new Book("活着2",23.00,"作家出版社2","余华2");

Book book3 = new Book("活着3",29.00,"作家出版社3","余华3");

Book book4 = new Book("活着4",33.00,"作家出版社4","余华4");

Book book5 = new Book("活着5",18.00,"作家出版社5","余华5");

ArrayList list = new ArrayList();

 

list.add(book1);

list.add(book2);

list.add(book3);

list.add(book4);

list.add(book5);

 

list.sort(new Comparator() {

@Override

public int compare(Object o1, Object o2) {

Book b1 = (Book)o1;

Book b2 = (Book)o2;

if(b1.getPrice() > b2.getPrice())

return 1;

return -1;

}

});

 

for(int n = 0; n < list.size(); n++) {

System.out.println(list.get(n));

}

 

}

 

}

 

class Book{

private String name;

private double price;

private String press;//出版社

private String author;

public Book() {

super();

// TODO Auto-generated constructor stub

}

public Book(String name, double price, String press, String author) {

super();

this.name = name;

this.price = price;

this.press = press;

this.author = author;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

public String getPress() {

return press;

}

public void setPress(String press) {

this.press = press;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

@Override

public String toString() {

return "Book [name=" + name + ", price=" + price + ", press=" + press + ", author=" + author + "]";

}

}

 

4. /*把如下元素存入List集合

"aaa" "bbb"  "aaa"   "abc"  "xyz" "123" "xyz"

 

去掉重复元素*/

 

import java.util.ArrayList;

import java.util.HashSet;

public class Test04 {

 

public static void main(String[] args) {

HashSet hs = new HashSet();

ArrayList list = new ArrayList();

hs.add("aaa");

hs.add("bbb");

hs.add("aaa");

hs.add("abc");

hs.add("xyz");

hs.add("123");

hs.add("xyz");

list.addAll(hs);

System.out.println(list);

}

 

}

  

5 /*已知 Student类  属性包括   int id,String name

 

创建 5个Student对象存入 List中

 

Student s1 = new Student(1,"aaa");

Student s2 = new Student(2,"bbb");

Student s3 = new Student(3,"ccc");

Student s4 = new Student(4,"ddd");

Student s5 = new Student(1,"aaa");

 

去掉重复元素:当Student的id和name值都相同时,任务是重复元素 */

import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Objects;

 

 

public class Test05 {

 

public static void main(String[] args) {

Student s1 = new Student(1,"aaa");

Student s2 = new Student(2,"bbb");

Student s3 = new Student(3,"ccc");

Student s4 = new Student(4,"ddd");

Student s5 = new Student(1,"aaa");

HashSet hs = new HashSet();

hs.add(s1);

hs.add(s2);

hs.add(s3);

hs.add(s4);

hs.add(s5);

List list = new ArrayList();

list.addAll(hs);

for(int n = 0; n < list.size();n++) {

System.out.println(list.get(n));

}

 

}

 

}

 

 

class Student{

private int id;

private String name;

public Student() {

super();

// TODO Auto-generated constructor stub

}

public Student(int id, String name) {

super();

this.id = id;

this.name = name;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "Student [id=" + id + ", name=" + name + "]";

}

@Override

public int hashCode() {//返回哈希码

return Objects.hash(id,name);//为输入值序列生成哈希码。

}

@Override

public boolean equals(Object obj) {

Student stu = (Student)obj;

return stu.getId()==id && stu.getName().equals(name);

 

}

 

 

 

}

 

6. /*String s = "...(...[....]....{....}..)...(...)..";  

判断括号是否匹配 */

 

import java.util.Stack;

public class Test07 {

 

 public static void main(String[] args) {

       

 String s = "...(...[....]....{....}..)...(...)..";

     System.out.println("The result is:" + isValid(s));

 }

 

 public static boolean isValid(String s) {

        Stack<Character> stack = new Stack<>();   //创建一个栈

        for (int i = 0; i < s.length(); i++) {

            if ((s.charAt(i) == '(') || (s.charAt(i) == '[') || (s.charAt(i) == '{')) {  

             // 如果是左括号,则将其放入栈内

                stack.push(s.charAt(i));//进栈    

            }

            if ((s.charAt(i) == ')') || (s.charAt(i) == ']') || (s.charAt(i) == '}')) {

             // 如果是右括号

                if (stack.empty()) {     

                 //  如果栈为空,则证明括号不匹配,返回false

                    return false;

                }

                if ((stack.peek() == '(' && s.charAt(i) == ')') || (stack.peek() == '[' && s.charAt(i) == ']') || (stack.peek() == '{' && s.charAt(i) == '}') ) {     // 如果栈顶元素和下一个右括号相匹配,则将其栈顶元素出栈

                    //stack.peek() 查看此堆栈顶部的对象,而不从堆栈中删除它

                 stack.pop();

                 //stack.pop() 删除此堆栈顶部的对象,并将该对象作为此函数的值返回

                }

            }

        }

        if (stack.empty()) {   

         // 遍历循环结束后,如果发现栈里为空,则证明括号匹配完毕;否则括号不匹配

            return true;

        }

        return false;

    }

}

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值