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