关闭

黑马程序员_集合3(HashMap,HashTable,TreeMap,Arrays,Collections,高级for,可变参数,静态导入,Date,Calendar,Math,System等)

标签: java基础面试题黑马程序员hashmap
502人阅读 评论(0) 收藏 举报
分类:

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

一.Map概述

1.Map集合:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。
                    Map和Set很像,事实上,Set底层就是使用了Map集合的结构。
2.Map共性方法:
  1)添加
      put(K key,V value),
      putAll(Map<?extends K,?extends V> m)
 2) 删除
  clear()
remove(Object key)
  3) 判断
   containsvalue(Object value)
  containsKey(Object key)
  4)
  获取
   get(Object key)
   size()
   values()
   entrySet()
   keySet()
 3.Map的子类
  1)HashTable 底层是哈希表结构,不可以存入null键和null值,该集合是线程同步的,效率稍低。
  2)HashMap  :底层是哈希表结构,允许使用null键和null值,该集合是不同步的,.效率高。
  3)  TreeMap:  底层是二叉树结构,线程不同步,可以用于给Map集合中的键进行排序。
 
Map集合的两种取出方式:
 1.keySet  : 将Map集合中的键存入到Set集合,因为Set具备迭代取出功能,所以可以迭代取出所有的键,再使用     Map的get方法,获取键所对应的值。
2.entrySet :将Map集合中的键和值存入到Set集合中,    而这个关系的数据类型就是:Map.Entry。

二.Collections集合工具


1.如果要往集合中存一些元素,但不需要保证唯一,这时用List集合,
但想对这个集合排序,但能排序的Tree是Set集合中的,这时就用到了Collections,Collections类是专门操作集合的工具类。
2.sort()方法的代码分析:
class Student
{
}
ArrayListlist = new ArrayList();
list.add(new Student());
public static <T extends Comparable<? super T>> void sort(List<T> list)
{
//对泛型进行限定,T必须是Comparable的子类,也就是说自身有比较性。 T代表学生
//一般Comparable后面接收的都是super,因为可以接收很多子类进来,用父类方法比。
}
3.sort()
1)  sort(List<T> list);
2) sort(List<t>list,Comparator<? super T> c)
4,max() 
1)public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
5 Collections.binarySearch
 binarySearch(List<? extends Comparable<?super T>> list, T key)
6 fill(List<?super T> list,T obj) 使用指定元素替换指定列表中的所有元素。
7,replaceAll(List<T> list, T oldVal, T newVal) 使用别一个值替换列表中出现的所有某一指定值。
8reverse(List<?> list)  反转指定列表中的元素的顺序。
9.reverseOrder
1) public static <T> Comparator <T> reverseOrder()
 返回一个比较器,它强行逆转实现了Comparable接口的对象collection的自然顺序。
2)public static <T> Comparator<T> reverseOrder(Coparator<T> cmp);返回一个比较器,它强行逆转指定比较器的顺序。
如果指定比较器为 null,则此方法等同于 reverseOrder()
10 synchronizedList(List<T> list) 集合中的对像虽然高效,
但是线程不安全,要是被多线程操作时就会出问题,为解决这个问题,Collections类中提供了加锁的方法。
11.public static void swap(List<?> list,int i,int j)
在指定列表的指定位置处交换元素,即可交换两个元素的位置。适用于有角标的List的集合。
12shuffle(List<?> list)  使用默认随机源对指定列表进行置换。就是随机重新排序原集合。


三 Arrays数组工具


1..toString(Object[] a) :
返回指定数组内容的字符串表示形式。
2.asList(T... a) :
1)public static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表,将数组变成list集合。
2)把数组变成list集合有什么好处?
可以使用集合的思想和方法来操作数组中的元素。
3)注意:
将数组变成集合,可以用contains(),get(),indexOf(),subLIst().
但不可以使用集合的增删方法。因为数组的长度是固定的。
如果你增删,就会发生UnsupportedOperationExceoption(不支持操作)异常。
4)如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

四.高级For循环

1.格式:

for(数据类型 变量名 :被遍历的集合(Collection)或者数姐)

{

}

2.高级for对集合进行遍历。

只能获取集合元素,但是不能对集合进行操作。

迭代器除了遍历,还可以进行remove集合中元素的动作。

3.传统for循环和高级for循环有什么区别呢?

高级for有一个局限性,必须有被遍历的目标。

建议在遍历数组的时候,还是用传统for循环,因为传统for循环可以定义角标。

4.示例:

ArrayList<String> al = new ArrayList<String>();

al.add("abc1");

al.add("abc2");

al.add("abc3");

for (String s : al)

{

s ="kk";

System.out.println(s);

}

五 可变参数

1.JDK1.5版本出现的新特性。

方法的可变参数:

在使用时注意:可变参数一定要定义在参数列表的最后面。

2.代码演示:

class ParamMethodDemo

{

public static void main(String[] args)

{

//show(3,4);

/*

//虽然少定义了多个方法。但是每次都要定义一个数组,作为实际参数。

int[] arr = {3,4};

show(arr);

int[] arr1 = {2,3,4,5};

show(arr1);

*/

/*

可变参数

其实就是上一种数组参数的简写形式。

不用每一次都手动的建立数组对象。

只要将要操作的元素作为参数传递即可。

隐式将这些参数封装成了数组。

*/

show("haha",2,3,4,5,6);

//show(2,3,4,5,6);

//show(2,5,3,5,56,76,43,2,3,);

//show();

}

public static void show(int... arr)

{

System.out.println(arr.length);

}

public static void show(String str,int... arr)

{

System.out.println(arr.length);

}

}

六静态导入

StaticImport 静态导入

当类名重名时,需要指定具体的包名。

当方法重名时,要指定具体所属的对象或者类。

import static java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。

import static java.lang.System.*;//导入了System类中所有静态成员。

七 System类

1.System(java.lang):

System:类中的方法和属性都是静态的。

out: 标准输出,默认是控制台。

in : 标准输入,默认是键盘。

该类中的方法:

1)static Properties getProperties()

确定当前的系统属性。

2)static String getProperty(String key)

获取指定键指示的系统属性。

3)static String getProperty(String key, String def)

获取用指定键描述的系统属性。

 

2.Properties(java.util)类:

extends Hashtable<Object,Object>

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。

属性列表中每个键及其对应值都是一个字符串。


该类中的方法:

1)String getProperty(String key)

用指定的键在此属性列表中搜索属性。

2)String getProperty(String key, String defaultValue)

用指定的键在属性列表中搜索属性。

3)Object setProperty(String key, String value)

调用 Hashtable 的方法 put   相似。

八 Math类和Random类

1.Math类(java.lang包中)//隐式导入类

1)ceil():

static double ceil(double a)

返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。

2)floor():

static double floor(double a)

返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。

3)round():

static long round(double a)

返回最接近参数的 long。

4)pow():

static double pow(double a, double b)

返回第一个参数的第二个参数次幂的值。

5)random():

static double random()

返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。


 

2.Random类(java.util)

1)nextInt():

int nextInt()

返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。

代码:

Random r = new Random();

for (int x=0; x<10; x++)

{

//int d = (int)(Math.random()*10+1);//返回0.0到1.0之间(含0不含1)的随机数。

int d = r.netInt(10)+1;

sop(d);

}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6920次
    • 积分:200
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档