黑马程序员-------Java笔记-------集合综合题(常考的三种题)

时间:2023-02-19 21:35:58

  • 一个ArrayList对象aList中有若干个字符串元素,现在遍历该ArrayList对象,删除其中所有值为abc的字符串元素。
    package demo;

    import java.util.ArrayList;

    //一个ArrayList对象aList中有若干个字符串元素,现在遍历该ArrayList对象,删除其中所有值为abc的字符串元素。
    /**
    * 思路:
    * 1.创建集合对象;
    * 2.创建元素对象;
    * 3.添加元素
    * 4.遍历元素,删除指定元素
    * 注意:正着遍历时,当集合中有连续的abc存在时,可能会出现删除不净的情况,需要避免
    * 倒着遍历;正着遍历时没删除一个abc时,角标自动减一位,
    *
    */
    public class Demo7 {
    public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("abc");
    list.add("bc");
    list.add("abc");
    list.add("abc");
    list.add("abc");
    list.add("bc");
    System.out.println(list);
    /*//倒着遍历
    for (int i = list.size()-1; i >0; i--) {
    if(list.get(i).equals("abc")){
    list.remove(list.get(i));
    }
    }*/
    //正着遍历
    for(int j=0;j<list.size();j++){
    if(list.get(j).equals("abc")){
    list.remove(j);
    //如果集合中有连续的abc存在,删除后,不j--,就会出现删除不净的情况
    //j--;
    }
    }
    System.out.println(list);
    }
    }<strong>
    </strong>


  • 取出一个字符串中字母出现的次数,如:“abcdekka27qoq”输出格式为a(2)b(1)k(2).....
    package demo;

    import java.util.Set;
    import java.util.TreeMap;

    //取出一个字符串中字母出现的次数,如:“abcdekka27qoq”输出格式为a(2)b(1)k(2).....
    /**
    * 思路:
    * 1.将字符串转换为字符数组
    * 2.定义一个map集合,字符做键,数字做值,定义一个StringBuffer
    * 3.遍历该数组,获取map集合的值,判断值是否为空,
    * 是:直接添加
    * 否:值++,在添加
    * 4.获取所有键的集合,通过键来找值,
    * 5.将键和值按指定格式添加到StringBuffer中
    * 总结:这题还是比较综合的,数组的遍历,考到了string和StringBuffer,还有双列集合的键和值的获取,键的唯一性。
    *
    */
    public class Demo9 {
    public static void main(String[] args) {
    String s="abcdekka27qoq";
    //字符串转换为字符数组
    char[] arr=s.toCharArray();
    StringBuffer bf = new StringBuffer();
    TreeMap<Character, Integer> map = new TreeMap<Character, Integer>();
    //遍历数组,来获取值,添加到集合
    for (int i = 0; i < arr.length; i++) {
    Integer in=map.get(arr[i]);
    if(in==null){
    map.put(arr[i], 1);
    }else{
    in++;
    map.put(arr[i], in);
    }
    }
    //获取键的集合
    Set<Character> set=map.keySet();
    //遍历键集合
    for(Character d:set){
    //获取键对应的值
    Integer dd=map.get(d);
    //按照指定的格式添加到StringBuffer
    bf.append(d+"("+dd+")");
    }
    System.out.println(bf);
    }

    }<strong>
    </strong>


  • 编写程序,随机生成5个1-10之间的随机数,存入一个List集合中,编写方法对List集合进行排序。
    package demo;import java.util.ArrayList;import java.util.Random;//编写程序,随机生成5个1-10之间的随机数,存入一个List集合中,编写方法对List集合进行排序,/** * 思路: * 1.创建list集合,产生随机数的对象 * 2.向list集合添加5个随机数 * 3.用冒泡对集合排序(因为是对集合直接排序,元素替换的时候得用list集合的方法) * 考点:产生随机数的类,list集合元素的添加,还有对集合直接排序。 * */public class Demo11 {	public static void main(String[] args) {		//创建list集合		ArrayList<Integer> list = new ArrayList<Integer>();		//创建产生随机数对象		Random d = new Random();		//添加5个随机数		while(list.size()<5){			Integer s=d.nextInt(10)+1;			list.add(s);		}		//对集合直接进行冒泡排序		for (int i = 0; i < list.size()-1; i++) {			for (int j = 0; j < list.size()-1-i; j++) {				if(list.get(j)>list.get(j+1)){					int s=list.get(j);					//int ss=list.get(j+1);					//list.get(j)=list.get(j+1);					//元素替换,使用list集合set方法					list.set(j, list.get(j+1));					list.set(j+1, s);				}			}		}		System.out.println(list);	}}