zoukankan      html  css  js  c++  java
  • 第十七笔记

    黑马程序员  <a href="http://www.itheima.com" target="blank">java培训</a>

                          第十七天笔记

    1.集合嵌套存储和遍历元素的案例代码实现

    package lm.list;

    import java.util.ArrayList;
    import java.util.List;

    public class DoubleList {
    public static void main(String[] args) {
    // 第一个班级的学生
    List<String> first = new ArrayList<String>();
    first.add("张三");
    first.add("李四");
    first.add("王五");
    first.add("李二");

    // 第二个班级的学生
    List<String> second = new ArrayList<String>();
    second.add("tom");
    second.add("fox");
    second.add("cindy");
    second.add("candy");

    //嵌套循環
    List<List<String>> school=new ArrayList<List<String>>();
    school.add(first);
    school.add(second);

    for(List<String> s:school)
    {
    for(String ss:s)
    {
    System.out.println(s);
    }
    }
    }

    }

    2.Arraylist集合的toString方法源码解析

    注意:使用打印语句打印对象的时候,系统会默认调用ToString方法。其TOString方法一定要重写。

    //介绍一下关于ArrayList的toString();
    public class ListDemo3 {
    
        public static void main(String[] args) {
    
            ArrayList<String> list = new ArrayList<String>();
            list.add("hello");
            list.add("world");
            list.add("java");
    
            // 当我们使用打印语句打印对象时,会默认调用其toString方法
            System.out.println(list);  //[hello, world, java]
            //通过结果可以知道,其toString方法一定重写。
            //我们在ArrayList类中没有看到toString方法,那么去其父类中查找.

    3.用户登录案例

    package lm.dao;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import lm.entity.Student;
    
    public class Userdao {
    
        public List<Student> list = new ArrayList<Student>();
    
        public void regist(Student sc) {
            for (Student student : list) {
                if (sc.getName().equals(student.getName())) {
                    System.out.println("注册失败,已存在用户名");
                    return;
                }
            }
            list.add(sc);
            System.out.println(list);
            System.out.println("注册成功");
    
        }
    
        public Boolean login(Student sc) {
            for (Student student : list) {
                if (sc.getName().equals(student.getName())) {
                    return true;
                }
            }
            return false;
    
        }
        
      public Student login1(Student sc)    
      {
          for (Student student : list) {
                if (sc.getName().equals(student.getName())) {
                     sc.setName(student.getName());
                     sc.setSex(student.getSex());
                     sc.setAge(student.getAge());
                     sc.setMoney(student.getMoney());
                     return sc;
                }
            }
        return sc;
      }
      
    }
    package lm.entity;
    
    public class Student {
       private String name;
       private String sex;
       private int age;
       private double money=0;
      public Student() {
        
            
        }   
    public Student(String name, String sex, int age) {
        super();
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        this.money = money;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Double saveMoney(Double money)
    {
        return this.money+money;
        }
    public Double getMoney(Double money)
    {
        return this.money-money;
        }
    
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + ((sex == null) ? 0 : sex.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (sex == null) {
            if (other.sex != null)
                return false;
        } else if (!sex.equals(other.sex))
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", sex=" + sex + ", age=" + age
                + ", money=" + money + "]";
    }
    
    }
    package lm.opmoney;
    
    import java.util.Scanner;
    
    import lm.entity.Student;
    
    public class Opmoney {
        Scanner sc=new Scanner(System.in);
        Student s=new Student();
        public Opmoney(Student sc)
        {
            s=sc;
            System.out.println("接受到的用户是"+s);
        }
        public void show()
        {
            while(true){
            System.out.println("选择你要进行的操作");
            System.out.println("1.存款");
            System.out.println("2.取款");
            System.out.println("3.查询用户信息");
            System.out.println("4.返回上一级");
            
            int a = sc.nextInt();
            switch (a) {
            case 1:
               saveMoney();
                break;
            case 2:
               getMoney();
                break;
            case 3:
               getMessage();
                break;
            case 4:
                    return;
            default:
                System.out.println("输入错误");
                break;
            }
            }
        }
        private void getMessage() {
            System.out.println(s);
            
        }
        private void getMoney() {
            System.out.println("请输入你要取出的金额");
            double money=sc.nextDouble();
            s.setMoney(    s.getMoney(money));
        }
        private void saveMoney() {
            System.out.println("请输入你要存入的金额");
            double money=sc.nextDouble();
            s.setMoney(    s.saveMoney(money));
        
            
        }
    }
    package lm.view;
    
    import java.util.Scanner;
    
    import lm.dao.Userdao;
    import lm.entity.Student;
    import lm.opmoney.Opmoney;
    
    public class InitFrame {
        Scanner sc = new Scanner(System.in);
        Userdao userdao=new Userdao();
        public InitFrame() {
            while(true){
            System.out.println("请选择操作:1.注册	  2.登录	 3.退出	  ");
            int a = sc.nextInt();
            switch (a) {
            case 1:
                registFrame();
                break;
            case 2:
               loginFrame();
                break;
            case 3:
    
                break;
            default:
                System.out.println("输入错误");
                break;
            }
            }
    
        }
    
        private void registFrame() {
            System.out.println("请输入你的姓名");
            String name=sc.next();
            System.out.println("请输入你的性别");
            String sex=sc.next();
            System.out.println("请输入你的年龄");
            int age=sc.nextInt();
            Student st=new Student(name,sex,age);
            
            userdao.regist(st);
            
            
            
        }
    
        private void loginFrame() {
            System.out.println("请输入你的姓名");
            String name=sc.next();
            Student sc1=new  Student();
            sc1.setName(name);
            Boolean flag=  userdao.login(sc1);
            if(flag)
            {
                System.out.println("登陆成功");
                Student s=userdao.login1(sc1);
                Opmoney op=new Opmoney(sc1);
                System.out.println("传入的用户是"+sc1);
                op.show();
                
            }else
                
            {
                System.out.println("登陆失败,用户名不存在");
            }
            
            }
         
    }
    package lm.test;
    
    import lm.view.InitFrame;
    
    public class TestDemo {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            InitFrame init=new InitFrame();
        }
    
    }

    4.Set集合概述及特点

    Set集合的特点:无顺序不可以重复

    注意:我们学习set,它没有特殊的方法,也就是说我们学习的都是从collection中的方法。主要学习数据结构。

    
    

    5. HashSet  存储字符并遍历

      1.hashset中的元素是不重复的

      2.hashset中的元素是无顺序的(装入顺序和迭代的顺序不一致,并且不保证元素的顺序永远不变)

      3.hashset集合怎样使用

    public class HashSetDemo1 {
    
        public static void main(String[] args) {
            // 1.创建一个HashSet集合.
            HashSet<String> set = new HashSet<String>();
            // 2.向集合中添加字符串元素
            System.out.println(set.add("tom")); //true
            System.out.println(set.add("james")); //true
            System.out.println(set.add("fox")); //true
            //System.out.println(set.add("james")); //false
            
            set.add("a");
            //3.遍历set集合  迭代器
            // for(Iterator<String> it=set.iterator();it.hasNext();){
            // String s=it.next();
            // System.out.println(s);
            // }
            //问题:增强for可不可以操作Set集合?
            for(String s:set){
                System.out.println(s);
            }
        }
    }

    6.Hashset保证元素的唯一性的源码解析

      1.Hashset的底层实现是Hashmap实现的

      在上面的案例中,我们使用HashSet只涉及到了两个方法。

    A.new HashSet

    B.  add方法

    我们调用new HashSet方法其实就是其底层建立了一个hashmap。

    7关于hash的问题

     在object中有一个hashcode方法,这个方法的返回值就是hash码。关于hashCode方法的一个常规协定:相等的对象应该具有相等的hash码.

    8.hashSet保证元素唯一性的代码体现及图解

    hashCode值的计算简单说,就是将对象中的属性的值相加

    如果属性是基本数据类型,直接加

    如果属性是引用类型,就得到其hash值在相加,它们的结果乘以了一个质数,目的是为了减少重复率。

    public V put(K key, V value) {
            if (table == EMPTY_TABLE) {
                inflateTable(threshold);
            }
            if (key == null)
                return putForNullKey(value);
            int hash = hash(key);
            int i = indexFor(hash, table.length);
            for (Entry<K,V> e = table[i]; e != null; e = e.next) {
                Object k;
                if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                    V oldValue = e.value;
                    e.value = value;
                    e.recordAccess(this);
                    return oldValue;
                }
            }
    
            modCount++;
            addEntry(hash, key, value, i);
            return null;
        }

    9.linkedHashSet的概述和使用

      linkedHashSet特点:保证数据元素的顺序(存入顺序和取出顺序一致)

    public class LinkedHashSetDemo {
    
        public static void main(String[] args) {
            LinkedHashSet<String> set = new LinkedHashSet<String>();
    
            set.add("a");
            set.add("b");
            set.add("k");
            set.add("d");
            
            System.out.println(set);
        }
    }

    10.treeSet的概述和使用

    A.特点: 不重复,可以对集合中元素进行排序。

    B.比较器:comparator

    C.自然顺序:comparable

      D.TreeSet保证集合元素的唯一性

      是用过自然顺序或者比较器来判断的。

    public class TreeSetDemo1 {
    
        public static void main(String[] args) {
            //1.创建TreeSet
            TreeSet<Integer> set=new TreeSet<Integer>();
            //2.向TreeSet中装入Integer数据
            set.add(3);
            set.add(1);
            set.add(7);
            set.add(2);
            set.add(8);
            
            //3.遍历TreeSet
            for(int n:set){ //注意,类型应该是Integer,但是jdk1.5提供也自动拆箱,所以可以写int。
                System.out.println(n);
            }
        }
    }

    11. treeSet保证元素唯一性和排序代码解析。

    基于 TreeMapNavigableSet 实现。

    使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,

    具体取决于使用的构造方法。

    1. new TreeSet();----à在TreeSet底层使用的是一个NavigableMap
    2. 当调用put方法是,我们通过源代码连接时,是链接到Map接口,接口中没有具有的方法实现,这时我们就可以在Map接口中查找它的实现类   NavigableMap接口。
    3. 在NavigableMap这个接口中也没有put方法实现,那么在看这个接口的实现类,

    TreeMap中有put方法实现

    13.TreeSet保证元素唯一性和自然顺序的原理和图解

    1. 当装入第一个元素时,因为集合中没有其它元素,那么它就是根
    2. 所有元素在装入时,如果是小的一直放在左边,大的放在右边,相等的不装入。

    3.问题:怎样比较的集合中的元素?

             在源代码中有:

             Comparator------比较器

    Comparable----- 自然顺序

    什么是自然顺序?

    实现了Comparable接口的类就具有了自然顺序,它比较时是通过接口中要重写的方法compareTo来完成的,这个方法返回的是int类型的值,0代表的是等于,负数代表的是小于,正数代表的是大于.

    比较器:在创建TreeSet时指定一个比较器

    比较器就是实现了Comparator接口的一个类,那么这个类需要重写接口中一个方法compare,这个方法返回的是int类型值,它的原理与comparTo方法一样。

  • 相关阅读:
    回文字符串系列问题
    找两个数组的重合数字系列
    IPC最快的方式----共享内存(shared memory)
    【经典算法】——KMP,深入讲解next数组的求解
    关于SqlDateTime溢出的问题
    git操作之常见问题解决方案
    Javascript中length属性的总结
    从零开始学node(一): nodejs开发环境的配置
    使用Number.parseFloat引发的悲剧
    超链接的那些事(三): 属性target
  • 原文地址:https://www.cnblogs.com/liman/p/4430717.html
Copyright © 2011-2022 走看看