对 Java 集合的巧妙利用

对 Java 集合的巧妙利用

 

  我们直接切入正题。首先大致介绍一下 Java 三大集合的一些特征:

  ①、ArrayList:底层采用数组结构,里面添加的元素有序可以重复。

  ②、HashSet:底层采用哈希表算法,里面添加的元素无序不可重复。

  ③、HashMap:底层也是采用哈希表算法,但是里面添加的元素是 key-value 的形式。key 不允许重复,value 可以。

 

  那么我们在日常编程中就可以好好利用这些集合的原理,简化我们的编程思路。

 

  一、如何统计一字符串中每个字符出现的次数?

  解析:给定一串字符串,统计每个字符出现的次数。那么最后统计出来的格式应该如下:

      a---num个

      b---num个

        ...

      j---num个等等

      很明显,这种格式首先第一个统计的字符是不能重复的,而出现的个数我们可以不用管。那么很容易联想到 Map 的集合原理,key-value。我们将统计的字符放在 Map<Character,Integer>中是一种很好的实现方式。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class CountCharTest {
     
    public static Map<Character, Integer> countChar(Map<Character, Integer> map,String str){
        //将所给的字符串解析为一个字符构造的数组
        char[] chars = str.toCharArray();
         
        for(char c : chars){
            if(map.containsKey(c)){
                int oldCount = map.get(c);
                map.put(c, oldCount+1);
            }else{
                map.put(c, 1);
            }
        }
         
        return map;
    }
 
    public static void main(String[] args) {
        String str = "afoiasfoffqefljflsda";
        //定义一个 Map 集合,用来存放统计的     字符--个数
        Map<Character, Integer> hashMap = new HashMap<>();
        System.out.println(countChar(hashMap,str));
        //{f=6, d=1, e=1, s=2, q=1, a=3, o=2, l=2, j=1, i=1}
    }
}

  补充:这里我们用来保存统计字符的是 HashMap 的实现类,这里打印出来的字符统计是无序的。如果我们想根据字符串给定的顺序有序的统计出来,可以使 LinkedHashMap

?
1
2
3
4
5
6
7
public static void main(String[] args) {
        String str = "afoiasfoffqefljflsda";
        //定义一个 Map 集合,用来存放统计的     字符--个数
        Map<Character, Integer> linkedHashMap = new LinkedHashMap<>();
        System.out.println(countChar(linkedHashMap,str));
        //{a=3, f=6, o=2, i=1, s=2, q=1, e=1, l=2, j=1, d=1}
    }

  如果想用 uicode 的编码顺序打印给定的字符串,那么我们使用 TreeMap 

?
1
2
3
4
5
6
7
public static void main(String[] args) {
        String str = "afoiasfoffqefljflsda";
        //定义一个 Map 集合,用来存放统计的     字符--个数
        Map<Character, Integer> treeMap = new TreeMap<>();
        System.out.println(countChar(treeMap,str));
        //{a=3, d=1, e=1, f=6, i=1, j=1, l=2, o=2, q=1, s=2}
    }

  

  

  二、给定一个数组,如何去掉重复的数据?

  解析:这个联想到集合的特定,我们就很容易想到用 Set 集合来解决。将数组中的元素都放到Set,然后将 Set 集合转变为数组就可以了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class ClearRepeatTest {
     
    public static Integer[] clearRepeat(int [] array){
        Set<Integer> set = new HashSet<>();
        for(int i : array){
            set.add(i);
        }
        Integer[] newArray = set.toArray(new Integer[set.size()]);
        return newArray;
    }
     
     
    public static void main(String[] args) {
        //创建一个数组,可以看出 2和4 是重复的
        int [] array = {1,2,3,4,8,2,5,4};
        Integer[] newArray = clearRepeat(array);
        for(Integer i : newArray){
            System.out.println(i);
        }
        //1 2 3 4 5 8
         
    }
 
}

  补充:同理我们可以 改变 Set 集合的实现类,hashSet 是无序的,我们可以会用 LinkedHashSet 保证既定顺序;TreeSet 保证自然顺序

转载于:https://www.cnblogs.com/123hll/p/6903344.html

创维e900v21e是一款智能电视,如果想要刷机并安装蓝牙和语音当贝纯净版系统,可以按照以下步骤操作: 首先,您需要准备一台电脑和一个USB闪存盘。 1. 在电脑上下载创维e900v21e刷机工具和蓝牙、语音当贝纯净版系统的ROM。确保ROM的版本适配您的电视型号,并且信任下载来源。 2. 将下载好的刷机工具和ROM保存到电脑的某个文件夹中,然后将USB闪存盘插入电脑。 3. 将USB闪存盘格式化为FAT32格式,并将刷机工具和ROM复制到USB闪存盘的根目录下。 4. 安全拔出USB闪存盘,并将其插入创维e900v21e的USB接口。 5. 打开电视,进入设置菜单,找到关于/系统设置选项,并记录电视的当前系统版本号。 6. 在设置菜单中找到存储与重置/恢复出厂设置选项,选择恢复出厂设置。这将清除电视的所有数据和设置。 7. 关闭电视,然后长按遥控器上的电源按钮,将电视置于待机状态。 8. 按住电视背面的刷机孔,同时按下遥控器上的电源按钮,然后松开刷机孔和电源按钮。电视会进入刷机模式。 9. 使用遥控器方向键选择从USB设备刷机的选项,然后按下遥控器上的确认按钮。 10. 选择USB设备中的刷机ROM,并按下确认按钮开始刷机过程。 11. 刷机完成后,电视会重新启动。根据提示完成初始设置。 12. 通过电视的应用商店或者网络下载并安装蓝牙和语音当贝纯净版的应用程序。 以上是大致的刷机步骤,具体的操作可能会因电视型号和系统版本的不同有所差别,请确保操作正确并遵循相关的刷机教程和官方指南,以免造成不可逆的损害。同时,刷机操作可能会导致设备的保修失效,请谨慎操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值