目录
集合操作
1.ArrayList类、LinkedList类使用及分析
2.HashSet、TreeSet 使用
3.HashMap、TreeMap 类使用及分析
4.其它常用集合类介绍
5.JUnit基本使用
图解LinkedList:
LinkedList是List的子类,List中的方法LinkedList都是可以使用,这里就不做详细介绍,我们只需要了解LinkedList 的特有方法即可。在开发时,LinkedList集合也可以作为堆栈。
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
//添加元素
link.addFirst("abc1");
link.addFirst("abc2");
link.addFirst("abc3");
System.out.println(link);
// 获取元素
System.out.println(link.getFirst());
System.out.println(link.getLast());
// 删除元素
System.out.println(link.removeFirst());
System.out.println(link.removeLast());
//判断集合是否为空
while (!link.isEmpty()) {
//弹出集合中的栈顶元素
System.out.println(link.pop());
}
System.out.println(link);
}
}
简介:
java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方 法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。
特点:
List 接口不同的是, Set 接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。
派生类:
Set 集合有多个子类,这里我们介绍其中的 java.util.HashSet 、 java.util.LinkedHashSet 这两个集合。
java.util.HashSet 是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序 不一致)。
java.util.HashSet 底层的实现其实是一个 java.util.HashMap 支持。
举个栗子:
import java.util.HashSet;
public class HashSetDemo {
public static void main(String[] args) {
//创建 Set集合
HashSet<String> set = new HashSet<>();
//添加元素
set.add(new String("cba"));
set.add("bac");
set.add("abc");
set.add("cba");
//遍历
for (String name : set) {
System.out.println(name);
}
}
}
什么是哈希表呢?
在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。 但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。
从JDK1.8开始,哈 希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找 时间。 简单的来说,哈希表是由数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,如下图所示。
图解哈希表:
总而言之,JDK1.8引入红黑树大程度优化了HashMap的性能,那么对于我们来讲保证HashSet集合元素的唯一, 其实就是根据对象的hashCode和equals方法来决定的。
如果我们往集合中存放自定义的对象,那么保证其唯一, 就必须复写hashCode和equals方法建立属于当前对象的比较方式。
现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等, 这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即 java.util.Map 接 口。 我们通过查看
特点:
派生类:
举个栗子:
import java.util.HashMap;
public class HashMapDemo {
public static void main(String[] args) {
//创建 map对象
HashMap<String, String> map = new HashMap<>();
//添加三个企业及其创始人到map集合
map.put("腾讯", "马化腾");
map.put("国美", "黄光裕");
map.put("乐视", "贾跃亭");
System.out.println(map);
// 想要移出 key为乐视的元素
System.out.println("从map中移出企业的创始人是:" + map.remove("乐视"));// 贾跃亭
// 查看移出后、剩余哪些元素
System.out.println("剩余的元素有:" + map);//// {腾讯=马化腾, 国美=黄光裕}
// 想要查看 国美的创始人 是谁
System.out.println("腾讯的创始人:"+ map.get("腾讯")); // 马化腾
System.out.println("国美的创始人:"+ map.get("国美")); // 黄光裕
// 想要查看 美团的创始人 是谁 ? 但是再map中没有存储过、因此会打印出null
System.out.println("美团的创始人:"+ map.get("美团"));
}
}
Map集合遍历键找值方式:
举个栗子:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/*
第三种方法:打印 键值对
*/
public class HashMapDemo {
public static void main(String[] args) {
// 1. 创建 map对象
HashMap<String, String> map = new HashMap<>();
// 2. 添加三个企业及其创始人到map集合
map.put("腾讯", "马化腾");
map.put("国美", "黄光裕");
map.put("乐视", "贾跃亭");
// 3. 将双列集合map集合转换为单列集合set
Set<Map.Entry<String, String>> set = map.entrySet();
// 4. 通过单列集合set,调用foreach
for(Map.Entry<String, String> founder : set ){
System.out.println(founder);
}
}
}
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/*
第四种方法:打印 键值对
*/
public class HashMapDemo {
public static void main(String[] args) {
// 1. 创建 map对象
HashMap<String, String> map = new HashMap<>();
// 2. 添加三个企业及其创始人到map集合
map.put("腾讯", "马化腾");
map.put("国美", "黄光裕");
map.put("乐视", "贾跃亭");
// 3. 将双列集合map集合转换为单列集合set
Set<Map.Entry<String, String>> set = map.entrySet();
// 4. 通过单列集合set,调用迭代器
Iterator<Map.Entry<String, String>> iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> founder = iterator.next();
System.out.println(founder);
}
}
}
/*
需求:打印 键值对
*/
public class HashMapDem {
public static void main(String[] args) {
// 1. 创建 LinkedHashMap 类型的 linkedHashMap 对象
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
// 2. 添加三个企业及其创始合
linkedHashMap.put("腾讯", "马化腾");
linkedHashMap.put("乐视", "贾跃亭");
linkedHashMap.put("国美", "黄光裕");
// 3.,取出元素。键找值方式
Set<Map.Entry<String, String>> set = linkedHashMap.entrySet();
for (Map.Entry<String, String> founder : set) {
System.out.println(founder.getKey() + "的创始人是:" + founder.getValue());
}
}
}
Collections类
举个栗子:
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsDemo {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
// 原始方法是 一个一个添加!
//list.add(12);
//list.add(14);
//list.add(15);
//list.add(1000);
//采用工具类 一次完成多个元素添加到集合中
Collections.addAll(list, 5,29,32, 1,2);
System.out.println(list);
//排序方法
Collections.sort(list);
System.out.println(list);
}
}
JUnit 是一个 Java 编程语言的单元测试框架
使用方法:
1. 创建一个类 ,命名规范为:XxxTest
public class UserLoginTest {
}
2. 创建一个方法,方法名称命名规范为:testXzz
public void testLogin(){
}
3. 在方法上一行加入annotation(注解):@Test
import org.junit.Test;
public class UserLoginTest {
@Test
public void testLogin(){
}
}
添加之后,会要求导入一个包。
运行方式:双击选中方法名称,右键run testLogin() 即可/或 选中 run Junit
注:
单元测试方法的权限修饰符必须采用 public
单元测试方法的返回值类型必须采用 void
单元测试方法上一行必须引入@Test注解