集合--list,set,map和输出一个字符串中的非重复内容的几个方法

list 集合

特点:有序,可重复

实现类:ArrayList  和  Linklist

ArrayList 实现了数组长度的可变性,相对于传统数组,省却了存储数据时的长度校验与扩容,方便查询

LinkedList 采用链表存储方式,插入、删除元素效率较高

set 集合

特点:无序,不可重复

实现类:Hashset  和   TreeSet

因为数组的无序性,遍历数组时不能使用for循环,只能使用 foreach和迭代器进行集合的遍历

map 集合

特点:不仅可以保存数据,还能保存数据间的关系

当我们在Map中存入数据时,要求存入的是一组数组,方法:

put(K key, V value)//把当前的key和对应的value存入数组中

   注意:如果新存入的数据中的Key已存在,新的Value会覆盖旧的Value 

实例介绍:通过数组和集合的特点将输入的字符串中的重复内容删除,输出一个新的字符串

 方法1:

//_______________________Set数组________________________________
    public void SShow(String string){ //利用set数组的特点:无序,不重复 
        Set set = new HashSet();//创建新的  set 数组
        for (int i = 0; i < string.length(); i++) {    
//            System.out.println(string.charAt(i));
            char op = string.charAt(i);
            set.add(op);            
//            set.add(string.charAt(i));
        }
        for(Object o : set){
        System.out.print(o);
        }
        System.out.println(" ");
    }    

方法2:

//_______________________hashmap________________________________    
    public  void MShow(String string){
        Map ha = new HashMap();
        //创建map数组,利用map(key,value)数组特点:key不重复保存,value覆盖
        for (int i = 0; i < string.length(); i++) {
            String s = ""+string.charAt(i);    
            ha.put(s, i);
        }
//        System.out.println(ha.keySet());
        String st = "" ;
        for(Object o : ha.keySet()){
//            System.out.print(o);
            st = st+o;
            }
        System.out.println(st);
    }

方法3:

//_______________________list数组________________________________        
    public void lShow(String string){
        //list数组存储数据:有序,可重复。
        //list有下标index,但是ArrayList实现了长度可变的数组,存储数据无序扩容
        String st = "" ;
        List list = new ArrayList();
        for (int i = 0; i < string.length(); i++) {
        if(!list.contains(string.charAt(i))){
        //遍历字符串,判定字符串中的字符是否已在数组中存储过,没有——存入,有——不操作数组
            list.add(string.charAt(i));
        }
        }
        for(Object o : list){
//            System.out.print(o);
            st = st+o;
            }
        System.out.println(st);                
    }

方法4:

//_______________________字符串________________________________
    public  String say(String string1){
        //传统字符串方法,根据获取的字符遍历字符串进行比较
        //indexOf()方法,如果传入的字符有,返回下标,没有,返回-1
            String s = "";
        for (int i = 0; i < string1.length(); i++) {           
              if(s.indexOf(string1.charAt(i))== -1){
                   s = s + string1.charAt(i);
               }
            }
        return s;
            }    

方法五:

//_______________________字符串数组________________________________
//字符串转换字符存入数组
//判断字符是否重复,不重复扩容
//输出字符串
//实操,避免双重循环,将判断扩容方法单独列出
    public static String[] kr(String arr[],String string){//传入的字符没有出现在数组中——数组扩容,有——数组不变
        int t = 0;
        for (int i = 0; i < arr.length; i++) { //遍历数组,检查传入的字符是否出现
            if(string.equals(arr[i])){
                t++;  //字符出现,t++ ,跳出循环,数组不变
                break;
                }
        }
        if(t == 0){    // t=0,说明传入的字符位在arr数组中出现,数组扩容,传入的字符存入扩容后数组最后一位
            arr = Arrays.copyOf(arr, arr.length+1);
            arr[arr.length-1] = string;
            }
        return arr;//返回新数组
        }

    public void Ashow(String string){  //传入要校验的字符串
        String[] arr = new String[0];  //定义一个临时空数组
        for (int i = 0; i < string.length(); i++) { //遍历字符串
        String st = string.charAt(i)+"";//将字符串中的每一个字符取出,
        //注意:取出的字符默认为char类型,因后续方法操作的数组类型都是string类型,所以需要转为string类型
        arr = Test.kr(arr, st);//调用判定扩容方法,给出新数组
        }
        String st = ""; //
        for(Object o : arr){ //for--each 循环输出arr数组内容,通过拼接,输出字符串st
            st = st+o;
            }
        System.out.println(st);    
    }

演示结果:

 

posted @ 2021-12-07 19:55  差点饿死  阅读(430)  评论(0)    收藏  举报