JAVA----集合的子接口List

版权声明:转载请标明出处~~谢谢! https://blog.csdn.net/zoe_ranxiaosu/article/details/81986659

List

List:列表
       此接口对应的实现类的特点都是:有序的,可以重复的
       重复与否与元素的equals方法有关

常用方法
      void add(int index,E element)--------将某一元素,插入到此集合的某一下标index处  
      E get(int index)--------------返回指定下标上的元素
      int indexOf(Object obj)--------------返回指定元素出现的位置,如果没有返回-1。 

      E set(int index, E newElement)  -------------使用新元素newElement替换下标index上的元素,返回原元素。
      boolean remove(int index)--------------移除此集合中下标为index的元素 (注意在元素的类中重写equals方法)  
      List subList(int fromIndex,int endIndex)------ 截取此集合中的一部分,即截取子集,从fromIndex到endIndex,包前不包后
               PS:此方法在堆中产生了一个内部类SubList集合对象,此集合对象引用的是父集的一部分。修改子集,会影响父集。
      int lastIndexOf(Object obj)------------返回此集合指定元素obj最后一次出现的下标,找不到返回-1

数组与集合之间的转换
    1、集合转数组
       Object[] toArray()
       E[] toArray(E[] e)
    2、数组转集合
       List Arrays.asList(T……a)  
       注意:数组转型的集合,不能进行增删操作,否则会出现运行时异常,可以进行替换操作,但是会对数组变量有影响。  
                  如果想要成功进行增删操作,可以将元素存入新的集合中。 

Iterator:迭代器接口


       (1)迭代器的作用是用来遍历集合元素。是一个接口,Collection继承了该接口,提供了一个方法Iterator iterator()
       (2)Collection的实现类使用内部类定义了迭代器子类。
       (3)迭代器提供了统一的方法,用于遍历集合元素
       常用方法:
        boolean hasNext()--------------- 判断集合中是否有下一个元素
        E next()----------------- 取出集合中的下一个元素
        remove(Object obj)-----------------在使用迭代器对集合进行遍历时,不能使用集合的移除方法移除集合的元素.
                                                           必须使用迭代器自己提供的移除方法才行。
 

      增强for循环——foreach循环
      for(元素类型 变量名:要遍历的集合或者数组){
      
      }
           与经典for循环的区别:
        (1)增强for循环中无法使用下标。
        (2)经典for循环可以使用下标,跟下标有关的逻辑,随便写 

 List的实现类

 (1)ArrayList------底层是基于动态数组的数据结构。是有存放顺序的。
   
 (2)LinkedList------底层是基于双链表的数据结构。每一个存储单元都涉及到其他两个引用。   
     ArrayList和LinkedList比较:在执行get()/set()时,ArrayList的效率高,LinkedList需要移动指针,效率低在增加和删除                                                       时,LinkedList效率高, ArrayList效率低(需要扩容,移动元素) 
                                                  PS:当然,在元素的数量大的情况下,区别才明显                       
 (3)Vector:是一个比较古老的集合类型,线程安全但是效率特别低,
                             虽然安全也不建议使用。

public class TestIterator02 {
	public static void main(String[] args) {
		/*创建一个集合list,用于存储坐标系第二象限的整数点
		 * 整数点5个
		 * 使用迭代器进行遍历,查看是否有点(-3,2).
		 * 如果有,请从集合中删除
		 * */
		List<Point> list = new ArrayList<Point>();
		list.add(new Point(-1,2));
		list.add(new Point(-2,4));
		list.add(new Point(-3,2));
		list.add(new Point(-6,7));
		list.add(new Point(-9,8));
		System.out.println(list);
		Iterator<Point> it = list.iterator();
		Point p1 = new Point(-3,2);
		while(it.hasNext()){
			Point p = it.next();
			if(p.equals(p1)){
				it.remove();
			}
		}
		System.out.println(list);
	}

}

List排序

Comparable接口:
        如何定义集合元素之间的大小之分?我们需要在定义元素类型时,实现Comparable接口,实现接口内的CompareTo(E e)。实现此接口的类型的对象之间可以进行比较。
方法:
    int compareTo(E e):
        比较规则:
         (1)this与e比较,this-e
                        如果大于零,返回大于0的一个数
                        如果等于零,返回0
                        如果小于零,返回小于0的一个数
                        按照升序排序
         
         (2)e-this,降序排序
工具类Collections
       提供了一个sort(Collection c)方法,对集合里的元素进行排序


Comparator比较器接口
     如果元素类型已经实现了Comparable接口,定义了默认的比较规则,之后再想换其他比较规则时,不修改源码。
     可以利用比较器接口来重新定义比较规则。
     
     方法:
      int compare(E o1,E o2);
            比较规则:
            升序:o1-o2
            降序:o2-o1

public class TestSort02 {
	public static void main(String[] args) {
		/* 在集合List中存储五个字符串对象,排序 */
		List<String> list = new ArrayList<String>();
		list.add("php");
		list.add("java");
		list.add("python");
		list.add("scala");
		list.add("C++");
		System.out.println(list);
		// 定义一个比较器对象
		Comparator<String> my = new Comparator<String>() {
			public int compare(String o1, String o2) {

				return o1.length() - o2.length();
			}

		};
		Collections.sort(list, my);
		/**Collections.sort(list, new Comparator<String>() {
			public int compare(String o1, String o2) {

				return o1.length() - o2.length();
			}

		};);----------------进一步修改*/
		System.out.println(list);
		/**max():找到自然排序后的最大值*/
		String  e1= Collections.max(list);
		System.out.println(e1);
		/**reverse():对集合元素进行反转*/
		Collections.reverse(list);
		System.out.println(list);
		/*shuffle():对集合元素进行打乱顺序,混洗*/
		Collections.shuffle(list);
		System.out.println(list);
	}

}
扫描二维码关注公众号,回复: 2937213 查看本文章

猜你喜欢

转载自blog.csdn.net/zoe_ranxiaosu/article/details/81986659