zoukankan      html  css  js  c++  java
  • Java学习-6

    集合

    迭代器

    什么是迭代器,即将一个集合或者数组中的所有元素依次输出

    1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收
    2.通过hasNext()方法判断是否有元素
    3.通过nest()取出下一个元素
    

    增强for循环

    格式:for(需要循环的数组类型 随便起个数组名:需要循环的数组名称)
    输出一个数组

    输出一个集合

    泛型

    泛型在类当中的应用

    定义一个类

    创建对象使用类

    泛型在方法当中的应用

    格式:修饰符 <泛型> 返回值类型 方法名(参数列表(使用泛型)){
        方法体;
    }
    


    调用方法

    一个斗地主的综合案例

    public class doudiz {
        public static void main(String[] args) {
            //puke集合存放牌
            ArrayList<String> puke = new ArrayList<>();
            String[] color = {"♥","♦","♠","♣"};
            String[] number = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
            //通过两个增强for循环将牌组合好并存放puke数组里面
            for (String col : color) {
                for (String num : number) {
                    puke.add(col+num);
                }
            }
            puke.add("大王");
            puke.add("小王");
            //通过Collections类中的静态方法shuffle将牌序打乱
            Collections.shuffle(puke);
            //创建3个集合存储玩家手牌,1个集合储存底牌
            ArrayList<String> playere1 = new ArrayList<>();
            ArrayList<String> playere2 = new ArrayList<>();
            ArrayList<String> playere3 = new ArrayList<>();
            ArrayList<String> item = new ArrayList<>();
            //通过for循环将牌发给集合
            for (int i = 0; i <puke.size() ; i++) {
                if(i>=51)
                    item.add(puke.get(i));
                else if(i%3==0)
                    playere1.add(puke.get(i));
                else if(i%3==1)
                    playere2.add(puke.get(i));
                else if(i%3==2)
                    playere3.add(puke.get(i));
            }
            //将玩家与底牌进行输出
            System.out.println("小明:"+playere1);
            System.out.println("小王:"+playere2);
            System.out.println("小红:"+playere3);
            System.out.println("底牌:"+item);
        }
    }
    

    List集合

    例:

        ArrayList<String> str = new ArrayList<>();
    	str.add("甲");
    	str.add("乙");
    	str.add("丁");
    	str.add("戊");
    	str.add("己");
    	str.add("庚");
    

    指定位置添加元素

    str.add(2,"丙");
    

    指定位置替换元素

    str.set(2,"3");
    

    LinkedList集合中特有的方法

    例:

        LinkedList<String> str = new LinkedList<>();
    	str.add("a");
    	str.add("b");
    	str.add("c");
    	str.add("d");
    	str.add("e");
    

    在首位置添加元素

    str.push("a");
    str.addFirst("q");
    

    在尾位置添加元素

    str.addLast("w");
    

    获取首位置元素(注:如果元素为空将出现异常)

    str.getFirst()
    

    获取尾位置元素

    str.getLast()
    

    删除首位置元素

    str.removeFirst();
    str.pop();
    

    删除尾位置元素

    str.removeLast();
    

    Set接口的特点

        1.不允许储存重复元素
        2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
    

    HashSet特点

    1.不允许储存重复的元素
    2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
    3.是一个无序的集合,储存元素和取出元素的顺序可能不一样
    4.底层是一个哈希表结构(查询的速度非常快)
    哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到地址,不是数据实际储存的物理地址)
    哈希表:类似图的链表存储结构
    

    注意:当使用hashset储存自定义类型的元素时,必须重写equals
    方法与hashCode()方法,因为正是有这两个方法hashset数组才不能储存重复的元素

    LinkedHashSet特点

    与HashSet集合相比,LinkedHashSet集合是有序的,即储存的元素顺序是什么,输出时的顺序就是什么

    可变参数

    前提:当方法的参数列表数据类型已经确定,但是参数的个数不确定时,就可以使用可变参数
    本质:即根据传入参数的多少,创建一个多大的数组来储存,可以是0个或者多个
    
    使用格式:
    修饰符 返回值类型 方法名 (数据类型...变量名){}
    

    例:

    注意事项:

    1.一个方法的参数列表,只能有一个可变参数
    例(错误写法):
    private static void show(int...arr,double...item)                    
    2.如果方法的参数有多个,那么可变参数必须写在参数列表的末尾
    例:private static void show(String str,double x,int...arr)
    

    Collections集合工具类中常用的方法

    addAll方法
    向集合中添加一些元素,例:

    Shuffle方法
    将集合中的元素顺序打乱,例:

    Sort方法
    1.将集合中的元素按默认方法排序,例:

    如果是自定义类要想使用该方法则必须实现Comparable类并重写其中的compareTo方法,通过传入正负数进行排列,如果想正序则“本身减参数”反之亦然,例自定义类:

        @Override
        public int compareTo(student o) {
            return this.age-o.age;
        }
    

    2.将集合按照自定义方法排序
    传入一个集合,传入比较器,重写比较器中的compare方法,例:

    Map集合

    特点:

        1.map集合是一个双列集合,一个元素包含两个值(key,value)
        2.map集合中的元素,key与value的数据类型可以相同也可以不同
        3.map集合中的元素,key是不允许重复的,value是可以1重复的
        4.map集合中的元素,key与value是一一对应的
    

    常用实现类HashMap集合(无序)与LinkedHashMap集合(有序)

    Put方法
    添加键与值到map集合中,例:

    Remove方法
    根据指定键把其键与值在map集合中删除,并返回值,如果键不存在则返回null,例:

    Get方法
    根据指定键返回其值,如果不存在则返回null,例:

    ContainsKey方法
    判断map集合中是否存在指定键,返回boolean值,例:

    Map集合的遍历方法

    方法一:

    1.使用Map集合中的keySet()方法,将集合中的键值取出并储存到一个Set集合中
    2.遍历集合,获取集合中的每一个key
    3.通过map集合中的get()方法获取value
    

    方法二:

    1.使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
    2.遍历Set集合,获取每一个Entry对象
    3.使用Entry对象中的方法getKey( )和getVaLue( )获取键与值
    

    HashMap存储自定义类型键值

    一.当key值是String类型,value为自定义类型时,String类重写hashCode方法与equals方法来保证key值的唯一,例:

    二.当key值是自定义类型,value为String类型时,必须在自定义方法中重写hashCode方法与equals方法来保证key值的唯一,例:

    关于map集合的综合案例:统计字符串的字符个数

    题目:将例:aaabbccabcd字符串统计其字符出现的次数

    System.out.println("请输入字符串:");
    	Scanner sc = new Scanner(System.in);
    	String str = sc.next();
    
    	HashMap<Character,Integer> map = new HashMap<>();
    
    	for (char c : str.toCharArray()) {
      	  if(map.containsKey(c))
       	 {
       	     Integer item = map.get(c);
        	    item++;
       	     map.put(c,item);
       	 }
       	 else
        	{
        	    map.put(c,1);
       	 }
    	}
    
    	Set<Character> key = map.keySet();
    
    	for (Character ke : key) {
       	 Integer number = map.get(ke);
        	System.out.println(ke+"="+number);
    	}
    

    集合添加元素方法的优化:of方法

    使用前提:of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类,像ArrayList,of方法的返回值是一个不能改变的集合,即不能在往里面添加或者删除元素,例:

  • 相关阅读:
    LeetCode "Median of Two Sorted Arrays"
    LeetCode "Distinct Subsequences"
    LeetCode "Permutation Sequence"

    LeetCode "Linked List Cycle II"
    LeetCode "Best Time to Buy and Sell Stock III"
    LeetCode "4Sum"
    LeetCode "3Sum closest"
    LeetCode "3Sum"
    LeetCode "Container With Most Water"
  • 原文地址:https://www.cnblogs.com/pzbangbangdai/p/12349864.html
Copyright © 2011-2022 走看看