map set以及大数据分析题(数据结构)

把一个字符串转化成整数:

1)通过Integer的构造方法进行转换:Integer t1=new Integer("100");

2)通过Integer的静态方法来进行转换:pareInt

3)通过Integer的静态方法来继续进行转换:valueOf

把一个整数转化成字符串:

1)调用String.valueOf()方法

2)调用Integer.Tostring()方法

3)调用String.format()方法,可以向整数转化成字符串

       int a=10;
       String str=String.format("我是%d",a);
       System.out.println(str);

4)调用DecimalFormat.format()方法

       int a=100;
       String strings=new DecimalFormat().format(a);
       System.out.println(strings);

5)使用字符串拼接的方式或者使用StringBuilder来进行拼接

再来介绍一下Map的常用方法:

    Map<String,String> map=new HashMap<>();
        map.put("及时雨","宋江");
        map.put("国民女神","高圆圆");
        map.put("豹子头","林冲");
        map.put("煞笔","dddddd");
        map.put("及时雨","孙悟空");//此时及时雨对应的值value值会更新;
        String str1=map.get("宋江");//注意,这套语句()只能返回Key对应的value值,所以打印结果是null
        String str2=map.get("及时雨");
        String str3=map.getOrDefault("智商超群","李佳伟");//这条语句时返回key对应的value值,如果key不存在,返回默认值
        map.remove("煞笔");//删除key对应的映射关系
        Set<String> collection1=map.keySet();//将所有key的集合都放到Set里面,返回值是Set<key> 类型
        Collection<String> collection2=map.values();//将所有values的值放到一个集合中,返回值的类型是Collection<value>
        boolean flag1=map.containsKey("及时雨");
        boolean flag2=map.containsValue("dddddd");
        //Set<Map.entry<K,V>> entryset=map.entrySet();
        //这句代码的意思是说,将当前map中的每一个key-value键值对整体变成Map.entry<K,V>类型,再把若干个Map.entry<K,V》
        //类型放到Set中
        Set<Map.Entry<String,String>> arr1=map.entrySet();
        //int[] arr1<Integer>
        for(Map.Entry<String,String> entryset:arr1)
        {
            System.out.println("key"+" "+entryset.getKey()+" "+"value"+entryset.getValue());
        }



    }

Map中的常见方法补充:

1)V get(Object Key) 返回Key对应的value

Map<String,Integer> map=new HashMap<>():

map.put("bite",1);

int ret=map.get("生命");//会出现空指针异常,Integer是引用类型,转化成int类型要进行拆包,而拆包调用的是intValue方法,此时出现的是空指针异常

2)V getOrDefault(Object Key,V defaultValue) 返回Key对应的Value,Key不存在,那么我们就返回默认值

3)V put(K key,V value)设置key对应的value;

4)V remove(Object key)删除key对应的映射关系

5)Set<K> keySet(),返回Map中所有key对应的映射集合

6)Collection<V> values()返回Map中所有value的可重复集合·

7)Set<Map.Entry<K,V>> entrySet(),返回所有的key-value的对应映射关系

8)boolean containsKey(Object Key),判断是否包含key

9)boolean containsValue(Object Value),判断是否包含value;

10)对于Map.Entry<K,V>从我的角度来进行理解,他就是一个类型,一个大集合,这个大集合里面存放了一对Key-Value值

K getKey() 返回entry中的key

V getValue()返回entry中的Value

V setValue(V value) 将键值对中的value替换成value;

Set中的常见方法补充:

1)boolean add(E e)添加元素,但是重复的元素是不会被添加成功的

2)void clear()清空集合

3)boolean contains(Object O)判断o是否在集合中

4)Iterator<E> iterator() 返回迭代器

5)int size() 返回Set中元素的个数

6)boolean isEmpty()检测set是否为空,空就返回false;

7)Object[] toArray();将Set中的元素转化成数组返回

8)boolean containsAll(Collection<?> c)判断集合c中的元素在set中是否全部存在,如果全部存在就返回true,相反就返回false;

9)boolean addAll(Collection<?extends E> c)将集合c中的元素放到set中,set中是不可以插入空的key值的

 HashMap的构造方法:

此时我们遍历HashMap可以通过keySet,entrySet,还可以通过foreach的方法进行遍历

其中这个for each的方法在底层还是通过entryset来进行实现的:在这里面需要传入一个BiConsumer接口:

Map<String,String> map=new HashMap<>();
    map.put("及时雨","生命在于运动");
     map.forEach(new BiConsumer<String, String>() {
         @Override
         public void accept(String s, String s2) {
             System.out.println( s+s2);
         }
     });
    }

1)public HashMap()----->无参构造

2)public HashMap(int 初始容量,int 负载因子)------>进行指定容量和负载因子进行构造对象

3)public HashMap(int 初始容量)--------->指定容量构造对象

4)public HashMap(Map<? extends K,? extends V> m,可以根据指定的map对象构建全新的HashMap对象

HashSet的构造方法:

1)public HashSet():无参构造方法

2)public HashSet(传入一个集合):根据集合对象构建HashSet

3)public HashSet(int 初始容量,float 负载因子)指定容量和负载因子进行构造

4)public HashSet(int 初始容量)

遍历Set集合:

1)通过迭代器来进行遍历

2)通过foreach来进行遍历

3)通过Interable接口中的forEach(传入一个接口,Consumer)来进行遍历,这里面的Consumer是一个函数式接口

  HashSet<Integer> set=new HashSet<>();
        set.add(1);
        set.add(4);
        set.add(10);
        set.forEach(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                System.out.println(integer);
            }
        });

4)通过toArray()方法来进行遍历

   Set<String> set =new HashSet<>();
        set.add("bit1");
        set.add("bit3");
        set.add("bit4");
        set.add("bit2");
        
        Iterator<String> it= set.iterator();
        while(it.hasNext())//检查序列中是否还有元素
        {
            System.out.println(it.next());//获取下一个元素
        }
        System.out.println(set);
        Object[] arr1=set.toArray();//将set里面的内容转化成数组;
        for(Object s:arr1)
        {
            System.out.println(s);
        }
    }

常见的大数据分析题:

1 有十万个数据,找到第一个重复的数据?

2 有十万个数据,去掉所有重复的数据?

3 有十万个数据,统计每个数据出现了多少次?

上代码 第2题:

   ArrayList<Integer> list=new ArrayList<>();
      Random random=new Random();
      HashSet<Integer> set=new HashSet<>();
      for(int i=0;i<1000;i++)
      {
          list.add(random.nextInt());//先把得到的随机数放到一个集合中,保存下来
      }
      for(int j=0;j<list.size();j++)
      {
          set.add(list.get(j));//将list中的值全部放到set集合中,因为set集合中不可以放重复的元素
//放到set中list原来的重复的元素就会被覆盖掉
      }
      System.out.println(map);
    

第一题:代码

用set来做

 List<Integer> list=new ArrayList<>();
     list.add(2);
     list.add(3);
     list.add(4);
     list.add(6);
     list.add(5);
     list.add(3);
     Set<Integer> set=new HashSet<>();
        for (int j = 0; j < list.size(); j++) {
            if(set.contains(list.get(j)))
            {
                System.out.println(list.get(j));
                return array[j];
            }
            else
            {
                set.add(list.get(j));
            }
        }

    }

还有一种方法,用map来做:

1)Key进行存放对应的整数,value存放对应的整数出现的次数

2)中心思想就是说判断array中的元素,是否出现在map里面,如果不在就是1,如果再就是原来的基础上+1;

  Map<Integer,Integer> map=new HashMap<>();
        ArrayList<Integer> list=new ArrayList<>();
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(6);
        list.add(5);
        list.add(3);
       for(int i=0;i<list.size();i++) {
           if (!map.containsKey(list.get(i))) {
               map.put(list.get(i), 1);
           } else {
               int count = map.get(list.get(i));
               count++;
               map.put(list.get(i), count);
           }
       }
       for(int j=0;j<list.size();j++)
       {
           if(map.get(list.get(j))>1)
           {
               System.out.println(list.get(j));
               break;
           }
       }

对于第三题则更简单

 for(int j=0;j<list.size();j++)
        {  
            System.out.println(list.get(j)+"出现了"+map.get(list.get(j))+"次");
        }

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值