标签:双向链表 java集合 shm hashmap 常用 generate .so hashtable 面试题
List集合有三个常用的实现类
 1.ArrayList: 底层部分使用数组实现,遍历熟读块。中间插入删除元素速度慢,线程不安全。
  2. Vector: 底层部分同样使用数组实现,线程不安全
  3.LinkedList :采用双向链表实现。元素的空间不连续。每个元素除了存放数据以外,还要存放上一个和下一个元素的地址。遍历速度慢,中间插入删除元素速度快。
   List元素可以重复  Set元素不能重复  所以有的面试题会叫你去掉数组中重复的元素 可以保存进set集合,再移出来
           例如
        int[] x ={1,2,3,4,5,3,3,5,2,5,7,6,9,8};
	//用 set下面的Hashset方法去掉重复的
	Set<Integer> set = new HashSet<Integer>();
	for(int i : x){
		set.add(i);
	}
4 Set集合常见(底层不是数组)都在util包里面
  1.HashSet接口
    输出的序列不一定,
    例如
     Set<Student> set = new HashSet<Student>();
   //添加
     set.add(new Student(1,"张三","男"));
   遍历
   因为底层不是数组,所以不能用For循环来遍历
   //方法一
	Iterator<Student> it = set.iterator();
	while(it.hasNext()){
		Student s = it.next();
		System.out.println(s);
	}
	System.out.println("=============================");
	//方法二
	for(Student s:set){
		System.out.println(s);
	}
   2,TreeSet接口 
   可以给集合元素排序
   添加删除方法和上面一样
用 Comparator接口  来判断怎么排序  需要有重写的抽象方法  在(import java.util.Comparator;)
   可以排序的set数组
	Set<Student> set = new TreeSet<Student>(new Comparator<Student>() {
		@Override
		public int compare(Student g0, Student g1) {
			return g0.getId() - g1.getId();
		}
	});
5,Map集合
   HashMap和HashTable的区别和联系
   1.HashMap和HashTable都是Map接口的实现类。一个元素可以存放两个对象。
   2.HashMap允许存放空键和空值。而Hashtable不允许存放空键和空值。
   3.HashMap线程不安全,而Hashtable线程安全
  新建Map接口
  Map<Integer,Student> map = new HashMap<Integer,Student>();
   1.添加元素
   map.put(1, new Student(1,"张三","男"));
   2.根据键对象,查找值对象,如果没找到返回null
   Student s = map.get(4);
   3.根据键对象,移除元素
	map.remove(2);
   4.得到集合长度
	System.out.println(map.size());
   5.遍历方式
     1.  得到Map集合的键对象
	Set<Integer>keySet = map.keySet();
	for(Integer x : keySet){
		Student st = map.get(x);
		System.out.println("键:"+x+"  值:"+st);
	}
    2.Collection<Student> c = map.values();
	for(Student st : c){
		System.out.println(st);
	}
 6.算法 分为 1.Arrays2. Collections   其中有个类 Collectios 不同于 Collction
     1.Arrays
      int[] array = new int[]{4,8,1,2,3,5,7,6,9};
	1.对数组排序1
	Arrays.sort(array);
	
	for(int i : array){
		System.out.println(i);
	}
        2.对数组排序2
       Arrays.sort(array,new Comparator<Student>() {
		@Override
		public int compare(Student arg0, Student arg1) {
			// TODO Auto-generated method stub
			return  arg0.getId() - arg1.getId();
		}
	});
      2. Collections
              List<Student> list = new ArrayList<Student>();
	
	// 集合元素的添加
	//写进去什么顺序 出来就是什么顺序
			list.add(new Student(11, "张三", 99));
			list.add(new Student(8, "李四", 89));
			list.add(new Student(7, "王二", 90));
			list.add(new Student(9, "飞升之后", 99));
								
			//反转排序
			Collections.reverse(list);
			
			//乱序。随机排列元素
			 Collections.shuffle(list);
			
			
			//排序,需要实现Comparator比较器接口,指明排序规则
			Collections.sort(list,new Comparator<Student>() {
				@Override
				public int compare(Student arg0, Student arg1) {
					// TODO Auto-generated method stub
					return arg0.getGrade() - arg1.getGrade();
				}
			});
			
			for(Student s : list){
				System.out.println(s);
			}
标签:双向链表 java集合 shm hashmap 常用 generate .so hashtable 面试题
原文地址:https://www.cnblogs.com/jiangximing/p/8907151.html