黑马程序员--Java学习日记之集合(collection类和map类代码)

------- android培训、 java培训、期待与您交流! ----------

                     正常遍历集合,判断遍历到的元素

                     这时一旦删除元素,集合长度会减1,循环索引加1后会有元素遗漏,遍历不到。

                     解决方案:删除一个元素,循环索引就减1.

package cn.itcast;

import java.util.ArrayList;

public class ArrayListDemo {
	
	public static void main(String[] args) {

		ArrayList list = new ArrayList();
		
		list.add("abc");
		list.add("abc");
		list.add("bbb");
		list.add("ccc");
		list.add("abc");
		list.add("abc");
		list.add("abc");
		list.add("abc");
		list.add("ooo");
		list.add("abc");
		list.add("abc");
		
		for (int i = 0; i < list.size(); i++) {
			String s = (String) list.get(i);
			if ("abc".equals(s)) {
				list.remove(i);
				i--;
			}
		}
		*/

		/*
		 * 方式2:将集合倒着遍历,判断元素并删除。
		 */
		for (int i = list.size() - 1; i >= 0; i--) {
			String s = (String) list.get(i);
			if ("abc".equals(s)) {
				list.remove(i);
			}
		}
		
		System.out.println("list:" + list);
		System.out.println(list.size());
		
	}
}

                     一个字符串集合ArrayList中含有如下元素:

                      hello,world, java, hello, .net, java, php,

                     ios,java, android,world。

                      要求编写程序,获得一个没有重复元素的新集合。  


package cn.itcast;

import java.util.ArrayList;
import java.util.LinkedHashSet;

public class ArrayListDemo2 {
	public static void main(String[] args) {

		ArrayList list = new ArrayList();
		
		list.add("hello");
		list.add("world");
		list.add("java");
		list.add("hello");
		list.add(".net");
		list.add("java");
		list.add("php");
		list.add("ios");
		list.add("java");
		list.add("android");
		list.add("world");
		
		/*
		
		// 创建新集合,遍历旧集合,获取到每一个元素进行判断, 新集合中是否已经存在,如果存在不添加
		ArrayList newList = new ArrayList();
		
		for (int i = 0; i < list.size(); i++) {
			String s = list.get(i);
			// 判断新集合中是否已存在
			if (!newList.contains(s)) { // 依赖equals方法
				// 不存在,添加
				newList.add(s);
			}
		}
		
		// 打印新集合
		System.out.println(newList);
		
		*/
		
		// 方式2 使用LinkedHashSet
		
		LinkedHashSet lhs = new LinkedHashSet<>();
		// 将list里所有元素添加到LinkedHashSet,自动实现了唯一,且不改变存取顺序
		lhs.addAll(list);
		// 清空list
		list.clear();
		// 将LinkedHashSet中的元素再添加回list
		list.addAll(lhs);
		
		System.out.println(list);
	}
}


打印出字符串"abbbbbccccdddee26"中每个字符出现的次数,要求输出格式:"a(1)b(5)c(4)d(3)e(2)2(1)6(1)"

           此题要求有顺序,所以采用LinkedHashMap实现


package cn.itcast;

import java.util.LinkedHashMap;

public class Test {

	public static void main(String[] args) {
		// 1,定义一个需要被统计字符的字符串
		String s = "abbbbbccccdddee26";
		// 2,将字符串转换为字符数组
		char[] arr = s.toCharArray();
		// 3,定义双列集合,存储字符串中字符以及字符出现的次数
		LinkedHashMap lhm = new LinkedHashMap<>();
		// 4,遍历字符数组获取每一个字符,并将字符存储在双列集合中
		for (char c : arr) {
			// 5,存储过程中要做判断,如果集合中不包含这个键,就将该字符当作键,值为1存储,如果集合中包含这个键,就将值加1存储
			if (!lhm.containsKey(c)) { // 如果不包含这个键
				lhm.put(c, 1);
			} else {
				lhm.put(c, lhm.get(c) + 1);
			}
		}
		// 6,遍历集合将键和值拼接起来
		StringBuilder sb = new StringBuilder();
		for (Character key : lhm.keySet()) { // hm.keySet()代表所有键的集合
			sb.append(key + "(" + lhm.get(key) + ")");
		}
		
		// 输出结果
		System.out.println(sb);
	}


                   

           有类似这样的字符串:"1.2,3.4,5.6,7.8,5.56,44.55"请按照要求,依次完成以下试题。

           (1)以逗号作为分隔符,把已知的字符串分成一个String类型的数组,数组中的每一个元素类似于"1.2","3.4"这样的字符串

           (2)把数组中的每一个元素以"."作为分隔符,把"."左边的元素作为key,右边的元素作为value,

           封装到Map中,Map中的key和value都是Object类型。 (3)把map中的key封装的Set中,并把Set中的元素输出。

           (4)把map中的value封装到Collection中,把Collection中的元素输出。



package cn.itcast;

import java.util.Collection;
import java.util.HashMap;
import java.util.Set;

public class Test {

	public static void main(String[] args) {
		String s = "1.2,3.4,5.6,7.8,5.56,44.55";
		// 逗号分隔成String类型数组
		String[] arr = s.split(",");
		
		// 再以点分隔,放进Map
		HashMap map = new HashMap();
		for (int i = 0; i < arr.length; i++) {
			String[] arrs = arr[i].split("\\.");
			map.put(Integer.parseInt(arrs[0]), Integer.parseInt(arrs[1]));
		}
		
		
		// 获取键集合
		Set set = map.keySet();// 获取键集合对象
		// 遍历键集合
		for (Integer in : set) {
			System.out.println(in);
		}
		
		System.out.println("-----------");
		
		// 获取值集合
		Collection c = map.values();
		// 遍历值
		for (Integer in : c) {
			System.out.println(in);
		}
		
	}

}



编写程序,循环接收用户从键盘输入多个字符串,直到输入“end”时循环结束,

并将所有已输入的字符串按字典顺序倒序打印。


package com.itheima.com;

import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;

public class TreeSetDemo {
	
	public static void main(String[] args) {
		
		// 封装键盘录入
		Scanner sc = new Scanner(System.in);
		
		// 定义TreeSet集合实现倒序排列
		TreeSet set = new TreeSet<>(new Comparator() {

			@Override
			public int compare(String s1, String s2) {
				// 如果允许重复,就再加一句判断,这个返回值是0就改成1
				return s2.compareTo(s1);
			}
		});
		
		// 录入数据
		System.out.println("请录入数据:");
		while (true) {
			String line = sc.nextLine();
			if ("end".equals(line)) {
				break;
			}
			set.add(line);
		}
		
		// 遍历集合获取数据
		for (String str : set) {
			//System.out.println(str);
			// 显示在一行
			System.out.print(str + "  ");
		}
		
		
	}
}

 1、有类似这样的字符串:"1.2,3.4,5.6,7.8,5.56,44.55"请按照要求,依次完成以下试题。

       (1)以逗号作为分隔符,把已知的字符串分成一个String类型的数组,数组中的每一个元素类似于"1.2","3.4"这样的字符串

       (2)把数组中的每一个元素以"."作为分隔符,把"."左边的元素作为key,右边的元素作为value,封装到Map中,Map中的key和value都是Object类型。

       (3)把map中的key封装的Set中,并把Set中的元素输出。

       (4)把map中的value封装到Collection中,把Collection中的元素输出。

 

package com.itheima;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class ExamTest1 {
	public static void main(String[] args) {
		String string = "1.2,3.4,5.6,7.8,5.56,44.55";// 定义一个字符串
		Map map = new HashMap();// 创建Map集合
		String[] str = string.split(",");// 将字符串以","分割,用一个字符串str数组接收
		//String[] str2 = null;// 创建一个字符串数组str2
		// 遍历str数组并将数组中的元素用"."分割(使用了正则表达式内容),用str2接收。
		for (int a = 0; a < str.length; a++) {
			String[] str2 = str[a].split("\\.");
			// 遍历str2数组,将分割后的内容存入到map集合中
			//for (int b = 0; b < str2.length; b++) {
				map.put(str2[0], str2[1]);
			//}
		}
		// 创建Collection集合col
		Collection col = new ArrayList<>();
		// 创建Set集合set,接受map中的key
		Set set = map.keySet();
		// 打印set
		System.out.println(set);
		// 遍历set集合,通过get方法获取map中的value,并添加进col集合中
		for (Object obj : set) {
			col.add(map.get(obj));
		}
		// 打印col
		System.out.println(col);
	}
}
 
  

你可能感兴趣的:(黑马程序员--Java学习日记之集合(collection类和map类代码))