集合--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); }
演示结果:

浙公网安备 33010602011771号