12:集合map、工具类
一、map集合
方法简介:
1、添加 put(K key, V value) 以键值对的形式往里存
putAll(Map<? extends K,? extends V> m) 把一个map里的内容作为值存入进map中。
2、删除 clear() 清空集合
remove(Object key) 清楚其中的一条
3、判断 containsValue(Object value) 判断map中是否包含某个值
containsKey(Object key) 判断map中是否包含某个值
isEmpty()判空
4、获取 get(Object key) 根据key获取值
size() 获取map集合的大小
class MapDemo
{
public static void main(String[] args)
{
Map<String,String> map = new HashMap<String,String>();
//添加元素,添加元素,如果出现添加时,相同的键,那么后添加的值会覆盖原有键对应值,并返回以前的值,以前没值就放回null
System.out.println("put:"+map.put("01","zhangsan1"));
System.out.println("put:"+map.put("01","wnagwu"));
- map.put("02","zhangsan2");
map.put("03","zhangsan3");
System.out.println("containsKey:"+map.containsKey("022")); 判断
//System.out.println("remove:"+map.remove("02"));删除
System.out.println("get:"+map.get("023"));
map.put("04",null);
System.out.println("get:"+map.get("04"));
//可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。
//获取map集合中所有的值。
Collection<String> coll = map.values();
System.out.println(coll);
System.out.println(map);
}

class MapDemo2
{
public static void main(String[] args)
{
Map<String,String> map = new HashMap<String,String>();
// Map<Integer,String> map = new HashMap<Integer,String>();
// map.put(8,"zhaoliu");
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("01","zhangsan1");
map.put("04","zhangsan4");
//先获取map集合的所有键的Set集合,keySet();
Set<String> keySet (故意起的,有意义)= map.keySet();
//有了Set集合。就可以获取其迭代器。
Iterator<String> it = keySet.iterator();
while(it.hasNext())
{
String key = it.next();
//有了键可以通过map集合的get方法获取其对应的值。
String value = map.get(key);
System.out.println("key:"+key+",value:"+value);
}
}
}

class MapDemo2
{
public static void main(String[] args)
{
Map<String,String> map = new HashMap<String,String>();
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("01","zhangsan1");
map.put("04","zhangsan4");
//将Map集合中的映射关系取出。存入到Set集合中。
Set<Map.Entry<String,String>> entrySet = map.entrySet();
Iterator<Map.Entry<String,String>> it = entrySet.iterator();
while(it.hasNext())
{
Map.Entry<String,String> me = it.next();
String key = me.getKey();
String value = me.getValue();
System.out.println(key+":"+value);
}
}
}



public class HashMapDemo {
public static void main(String[] args) {
/*
* 将学生对象和学生的归属地通过键与值存储到map集合中
*/
HashMap<Student,String> hm = new HashMap<Student,String>();
hm.put(new Student("lisi",38),"北京");
hm.put(new Student("zhaoliu",24),"上海");
hm.put(new Student("xiaoqiang",31),"沈阳");
hm.put(new Student("wangcai",28),"大连");
hm.put(new Student("zhaoliu",24),"铁岭");
? o1.getAge-o2.getAge:temp;}
}
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap<Student,String> tm = new TreeMap<Student,String>(new ComparatorByName());
tm.put(new Student("lisi",38),"北京");
tm.put(new Student("zhaoliu",24),"上海");
tm.put(new Student("xiaoqiang",31),"沈阳");
tm.put(new Student("wangcai",28),"大连");
tm.put(new Student("zhaoliu",24),"铁岭");
Iterator<Map.Entry<Student, String>> it = tm.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Student,String> me = it.next();
Student key = me.getKey();
String value = me.getValue();
System.out.println(key.getName()+":"+key.getAge()+"---"+value);
}
}
}
public class LinkedHashMapDemo {
public static void main(String[] args) {
HashMap<Integer,String> hm = new LinkedHashMap<Integer,String>();
hm.put(7, "zhouqi");
hm.put(3, "zhangsan");
hm.put(1, "qianyi");
hm.put(5, "wangwu");
Iterator<Map.Entry<Integer,String>> it = hm.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Integer,String> me = it.next();
Integer key = me.getKey();
String value = me.getValue();
System.out.println(key+":"+value);
}
}
}
class MapTest1
{
public static void main(String[] args)
{
String s= charCount("ak+abAf1c,dCkaAbc-defa"); //返回一个新的字符串结果
System.out.println(s);
}
public static String charCount(String str)
{ //将字符串变成字符数组
char[] chs = str.toCharArray();
//定义map集合表。
Map<Character,Integer> tm = new TreeMap<Character,Integer>();
//因为只存取,不需要TreeMap的特有方法,将他提升为map就可以
for(int x=0; x<chs.length; x++)
{
if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))
continue;
//将数组中的字母作为键去查map表。
Integer value = tm.get(chs[x]); //直接作为键去查表
int count = 1; //计数器
//判断值是否为null.
if(value!=null){
count = value+1; //用个变量记录下
}
// count++;
map.put(chs[i], count);
/* //这种比较麻烦
if(value==null){
map.put(chs[i], 1);
}else{
map.put(chs[i], value+1); //直接往集合中存储字符和数字,为什么可以,因为自动装箱
}
*/
}
}
//System.out.println(tm);
// 上边已经解决,转换它的那种结果a(2)b(1).
return mapToString(map);
}
private static String mapToString(Map<Character, Integer> map) {
StringBuilder sb = new StringBuilder();
Iterator<Character> it = map.keySet().iterator();
while(it.hasNext()){
Character key = it.next();
Integer value = map.get(key);
sb.append(key+"("+value+")");
}
return sb.toString();
}
}
public class MapTest2 {
public static void main(String[] args) {
String week = getWeek(1); //查表
System.out.println(week);
System.out.println(getWeekByMap(week));
}
public static String getWeekByMap(String week){
Map<String,String> map = new HashMap<String,String>();
map.put("星期一","Mon");
map.put("星期二","Tus");
map.put("星期三","Wes");
map.put("星期日","Sun");
map.put("星期天","Sun");
return map.get(week);
}
public static String getWeek(int week){
if(week<1 || week>7)
throw new RuntimeException("没有对应的星期,请您重新输入");
String[] weeks = {"","星期一","星期二"};
return weeks[week];
}
}
第二:Collections工具类
Collections和Collection有什么区别?
- Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。它有两个常用的子接口
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
- Collections ? o1.compareTo(o2) : temp;
}
}
- Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。它有两个常用的子接口
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
- Collections ? o1.compareTo(o2) : temp;
}
}
Set:不可以重复元素。无序。
- Collections ? o1.compareTo(o2) : temp;
}
}

public static <T> void mySort(List<T> list,Comparator<? super T> comp){
for (int i = 0; i < list.size()-1; i++) {
for (int j = i+1; j < list.size(); j++) {
if(comp.compare(list.get(i), list.get(j))>0){
// T temp = list.get(i);
// list.set(i, list.get(j));
// list.set(j, temp);
Collections.swap(list, i, j);
}
}
}
public static <T extends Comparable<? super T>> void mySort(List<T> list){ 长度比较
//<T extends Comparable<? super T>>需要限定,继承
; i < list.size()-1; i++) {for (int j = i+1; j < list.size(); j++) {
if(list.get(i).compareTo(list.get(j))>0){
Collections.swap(list, i, j);
public static void demo_2(){二分查找、最值
List<String> list = new ArrayList<String>();
list.add("abcde");
list.add("cba");
list.add("aa");
list.add("zzz");
list.add("cba");
list.add("nbaa");
// Collections.sort(list); 没顺序不能折半,先排序
System.out.println(list);

// int index = Collections.binarySearch(list, "cba");
// System.out.println("index="+index);
//获取最大值。
String max = Collections.max(list,new ComparatorByLength());
//list,new ComparatorByLength()自然排序/排序器(名字长度)最值 demo_1
System.out.println("max="+max);
}
public static void demo_3() {
/*用比较器逆序
TreeSet<String> ts = new TreeSet<String>(new Comparator<String>(){
public int compare(String o1, String o2) {
int temp = o2.compareTo(o1);
return temp;
}
});
*/
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new ComparatorByLength()));
ts.add("abc");
ts.add("hahaha");
ts.add("zzz");
ts.add("aa");
ts.add("cba");
System.out.println(ts);
}
public static void demo_4() {
List<String> list = new ArrayList<String>();
list.add("abcde");
list.add("cba");
list.add("zhangsan");
list.add("zhaoliu");
list.add("xiaoqiang");

这是俩步,一样



Collections.shuffle(list); (洗牌)
// Collections.fill(list, "cc");
System.out.println(list);
}

List list = new ArrayList();//非同步的。
list = MyCollections.synList(list);//返回一个同步的list.
给非同步的集合加锁。
class MyCollections{
public static List synList(List list){
return new MyList(list);
}
private class MyList implements List{
private List list;
private static final Object lock = new Object();
MyList(List list){
this.list = list;
}
在加元素的同时,删除元素
public boolean add(Object obj){
synchronized(lock)
{
return list.add(obj);
}
}
public boolean remove(Object obj){
synchronized(lock)
{
return list.remove(obj);
}
}
}
public class ArraysDemo {
tic void main(String[] args) {
/*
* Arrays:集合框架的工具类。里面的方法都是静态的。
*
*/
// int[] arr = {3,1,5,6,3,6};
// System.out.println(Arrays.toString(arr)); 输出为[3,1,5,6,3,6]
}
//toString的经典实现。
public static String myToString(int[] a){
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {//中间省略条件判断,提高了效率。
b.append(a[i]);
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
public static void demo_1() {
/*
* 重点:List asList(数组)将数组转成集合。
*
* 好处:其实可以使用集合的方法操作数组中的元素。
* 注意:数组的长度是固定的,所以对于集合的增删方法是不可以使用的
* 否则会发生UnsupportedOperationException
*
*/
String[] arr = {"abc","haha","xixi"};
以前:比较麻烦
boolean b = myContains(arr, "xixi");
System.out.println("contains:"+b);
public static boolean myContains(String[] arr,String key){
for (int i = 0; i < arr.length; i++) {
if(arr[i].equals(key))
return true;
}
return false;
}
List<String> list = Arrays.asList(arr);
boolean b1 = list.contains("xixi");
System.out.println("list contaisn:="+b1);
// list.add("hiahia");//UnsupportedOperationException
System.out.println(list);
}
public static void demo_2() {
/*
* 如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行集合存储。
*
* 如果数组中的元素是基本类型数值,那么会将该数组作为集合中的元素进行存储。
*
*/
int(写成integer是对象)[] arr = {31,11,51,61};
List<int[]> list = Arrays.asList(arr);
System.out.println(list); 这里的集合中只有一个元素
}

public class ToArray {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
/*
* toArray方法需要传入一个指定类型的数组。
* 长度该如何定义呢?
* 如果长度小于集合的size,那么该方法会创建一个同类型并和集合相同size的数组。
* 如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合中的元素,其他位置默认为null。
*
* 所以建议,最后长度就指定为,集合的size。
*/
String[] arr = list.toArray(new String[list.size()]); //字符串数组
System.out.println(Arrays.toString(arr));
}
}
一个ArrayList对象alist中存有若干个字符串元素,现欲遍历该ArrayList对象,
int size = alist.size();
for(int i = 0; i < size; i++) {
if("abc".equals(alist.get(i))) {
alist.remove(i);
}
}
*/
public class Test13 {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("haha");
al.add("abc");
al.add("abc");
al.add("abc");
// int size = al.size();
for(int x=0; x<al.size(); x++){
if("abc".equals(al.get(x))){
al.remove(x);
x--;
}
}
System.out.println(al);
}
}
12:集合map、工具类的更多相关文章
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)
package com.itcast.test20140113; import java.util.ArrayList; import java.util.Arrays; import java.ut ...
- java 集合Collections 工具类:排序,查找替换。Set、List、Map 的of方法创建不可变集合
Collections 工具类 Java 提供1个操作 Set List Map 等集合的工具类 Collections ,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集合 ...
- Java中的集合Collections工具类(六)
操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集 ...
- 操作集合的工具类:Collections
Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序.查询和修改等操作,还提供了将集合对象置为不可变.对集合对象实现同步控制等方法 ...
- 操作集合的工具类Collections
1 操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操 ...
- Java集合----Collection工具类
Collections 工具类 Collections 是一个操作 Set.List 和 Map 等集合的工具类 Collections 中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了 ...
- Java集合——Collections工具类
Java集合——Collections工具类 摘要:本文主要学习了Collections工具类的常用方法. 概述 Collections工具类主要用来操作集合类,比如List和Set. 常用操作 排序 ...
- java之操作集合的工具类--Collections
Collections是一个操作Set.List和Map等集合的工具类. Collections中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控 ...
- Java-集合第六篇操作集合的工具类Collections
1.Java提供了一个操作Set.List.Map等集合的工具类:Collections. 工具类中提供的方法主要针对Set.List.Map的排序.查询.修改等操作,以及将集合对象设置为不可变.对集 ...
- java基础37 集合框架工具类Collections和数组操作工具类Arrays
一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...
随机推荐
- Mac 系统下 mysql 的安装与配置
1.mysql 的安装 1)官网下载 mysql 安装包:http://www.mysql.com/downloads/ 2)下载后解压打开安装包,点击 pkg 文件进行安装 3)注意:最后一步弹窗会 ...
- <Dare To Dream 团队>第一次作业:团队亮相
队名:Dare To Dream 2.团队成员组成:学号/姓名(标记团队组长): 201571030333/绽玉林(组长) 201571030132/姚慧霞 201571030308/李金平 2 ...
- CheckBox获取一组及全选
获取一组CheckBox: jQuery: $(function () { $("input[name=names]").click(function () { //获得所有的na ...
- MFC之sqlite
引用头文件和将生成的SQLite.dll加载到项目中 #include "sqlite3.h" 1.动态加载sqlite //***********************数据库动 ...
- Http的缓存机制
最近参加一个面试,被面试官问到http的缓存机制,发现自己并不熟悉,于是这篇博客诞生了. HTTP是超文本传输协议,从万维网服务器传输文本到本地浏览器的传送协议,基于TCP/IP通信协议传递数据 HT ...
- Macro_Average和Micro_Average准则的选择标准
- 创建第一次C语言程序
在这里我以VS2015为例,做演示.为什么要去演示怎样创建项目尼,因为我写第一个程序时,不知道该怎样用VS创建我的第一个应用程序. 第一步:打开VS环境如下 第二步:在开始出点击“新建项目”或在右上角 ...
- 890. Find and Replace Pattern找出匹配形式的单词
[抄题]: You have a list of words and a pattern, and you want to know which words in words matches the ...
- node.js中express的Router路由的使用
express中的Router作用就是为了方便我们更好的根据路由去分模块.避免将所有路由都写在入口文件中. 一.简单的使用Router const express = require('express ...
- 循序渐进VBA EXCEL数据操作小实例
1 向指定单元格区域内写入数据 Sub example1() ) arr() = Array("A", "B", "C", "D& ...