提供比float和double更高精度的运算,减小运算过程中的误差
若希望表示比long类型范围还大的数据,则需要使用java.math.BigInteger类型来描述。
两个类中都包含有各自定义好的加减乘除以及求余的方法。
由于字符串内容不可更改,因此java虚拟机会将首次出现的字符串放入常量池,在后续代码中如果出现了相同字符串,则直接使用已有字符串对象,而无需再申请内存和创建对象,提高了性能。
Collection接口是List接口、Set接口以及Queue接口的父接口。
Collection c=new ArrayList();//不指定具体类型,存储元素类型默认为Object
Collection utilCo=new ArrayList();
//迭代器
Iterator it=c.iterator();
//使用方式
while(it.hasNext){
//下一元素
System.out.println(it.next());
}
//添加
c.add(123);
c.add("kaka");
c.add('S');
utilCo.add("kaka");
utilCo.add("test");
utilCo.add(222);
//删除
c.remove(123);//删除单个元素
c.removeAll(c); //删除参数中的集合的所有元素
//是否包含指定元素或集合
c.contains("kaka"); //单个元素
c.containsAll(utilCo);
//求和参数集合的交集
c.retainAll(utilCo);
//清空集合
c.clear();
//其他
c.size();//求集合包含元素个数
c.isEmpty();//判空
c.equals(utilCo);
c.hashCode();
//集合转换为数组 return Object[]
c.toArray();
Collection接口实现了Iterator接口,Iterator可以遍历Collection集合中的元素。
常用方法
List l1=new ArrayList();
List l2=new ArrayList();
//向指定索引处添加元素
l1.add(0,"kaka");
l1.add(1,20);
l2.add(0,"test");
l2.add(1,11);
//将参数指定集合中的所有元素添加至指定索引
l1.addAll(2,l2);
//获取元素
l1.get(2);
//查找指定元素的索引
l1.indexOf("kaka");//正向
l1.indexOf("kaka");//反向
//修改指定位置元素
l1.set(0,"卡卡");
//删除指定位置元素
l1.remove(1);
//返回子集合
l1.subList(0,3); //与字符串类中的subString类似
Queue q=new LinkedList();
for(int i=1;i<10;i++){
q.offer(i*8+20);//添加元素
}
System.out.println("queue="+q);
//删除元素
q.poll();
System.out.println("删除队首元素后:"+q);
//返回队首元素
System.out.println(q.peek());
Map<String,Integer> map=new HashMap<>();
//添加元素
map.put("张三",18);
map.put("李四",20);
map.put("王卡卡",22);
//获取元素
System.out.println(map.get(18));
//是否包含指定的key
boolean flag=map.containsKey("王卡卡");
flag=map.containsValue(22);
//根据key值删除元素
map.remove("李四");
//返回键的Set视图
Set<String> set=map.keySet();
//返回值的Collection视图
Collection<Integer> c=map.values();
//返回 键值对形式的Set视图
Set<Map.Entry<String,Integer>> entries=map.entrySet();
//使用foreach遍历
for(Map.Entry<String,Integer> m:entries){
System.out.println(m);
}
// 1.准备一个集合并初始化
List<Integer> lt1 = Arrays.asList(10, 30, 20, 50, 45);
// 2.实现集合中元素的各种操作
System.out.println("集合中的最大值是:" + Collections.max(lt1)); // 50
System.out.println("集合中的最小值是:" + Collections.min(lt1)); // 10
// 实现集合中元素的反转
Collections.reverse(lt1);
System.out.println("lt1 = " + lt1); // [45, 50, 20, 30, 10]
// 实现两个元素的交换
Collections.swap(lt1, 0, 4);
System.out.println("交换后:lt1 = " + lt1); // [10, 50, 20, 30, 45]
// 实现元素的排序
Collections.sort(lt1);
System.out.println("排序后:lt1 = " + lt1); // [10, 20, 30, 45, 50]
// 随机置换
Collections.shuffle(lt1);
System.out.println("随机置换后:lt1 = " + lt1); // [30, 10, 45, 20, 50] 随机
// 实现集合间元素的拷贝
//List lt2 = new ArrayList<>(20);
List<Integer> lt2 = Arrays.asList(new Integer[10]);
System.out.println("lt1的大小是:" + lt1.size());
System.out.println("lt2的大小是:" + lt2.size());
// 表示将lt1中的元素拷贝到lt2中
Collections.copy(lt2, lt1);
System.out.println("lt2 = " + lt2);
只在编译器有效,运行时不区分具体类型。
有时候我们希望传入的类型在一个指定的范围内,此时就可以使用泛型通配符了。
如:之前传入的类型要求为Integer类型,但是后来业务需要Integer的父类Number类也可以传
入。
泛型中有三种通配符形式: