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方法的返回值是一个不能改变的集合,即不能在往里面添加或者删除元素,例:

posted @ 2020-02-23 15:01  白短袖真的是百搭啊  阅读(238)  评论(0编辑  收藏  举报