handsomecui的blog地址为:http://www.cnblogs.com/handsomecui/

本人网站为:handsomecui.top

引言:本次主要练习单列集合:Collection,List,ArrayList,LinkedList,Vector,Set,HashSet,

1.Collect: 单列集合的跟接口;

2.List: 如果是实现了List接口的集合类,具备的特点: 有序,可重复

3.ArrayList:ArrayList的底层是使用了Object数组实现的,特点:查询速度快,增删慢

4.LinkedList:底层使用了链表数据结构实现的,特点:查询慢,增删快

5.Vector:底层使用了Object数组实现,实现与ArrayList一致,但是线程安全,操作效率低下

6.Set:如果实现了Set接口,具备的特点:无需,不可重复

7.HashSet:底层用哈希表实现的,特点:存取速度快

8.TreeSet:

  (1)添加元素时,如果元素具备自然顺序的特点,那么TreeSet会根据元素自然顺序存取

  (2)如果不具备自然顺序,那么元素所属的类就必须要实现Comparable接口,把比较的规则定义在ComepareTo的方法上。

  (3)如果不具备自然顺序,而且元素所属的类也没有实现Comparable接口,那么必须在创建TreeSet对象的时候就必须传入比较器对象。

  比较器的定义格式:

    class 类名 implements Comparator{}

双列集合:

  1.Map:存储的结构是以键值的形式存在的,键不可以重复,值可以重复

  2.HashMap:底层也是用哈希表实现的。

  3.TreeeMap:底层是红黑树数据结构实现的。

HashSet:

实例:

package com.java.base;

import java.util.HashSet;

class Person{
private int id;
private String name;
private int age;
public Person(int id, String name, int age){
this.name = name;
this.age = age;
this.id = id;
}
public String toString(){
return name + "的年龄是: " + age + "\n";
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return id;
}
@Override
public boolean equals(Object obj) {
Person person = (Person)obj;
return person.id == id;
}
}
public class hashSetLearn{
public static void main(String[] args){
HashSet<Person>hashset = new HashSet<Person>();
hashset.add(new Person(10, "张三", 21));
hashset.add(new Person(11, "李四", 21));
hashset.add(new Person(11, "李四", 21));
System.out.println(hashset);
}
}

往haset 中添加元素的时候会先用hashCode 的方法得到元素的hash值,然后把这个值经过运算得到位置,如果这个位置没有值,就放里面,如果有
就用equal的方法,如果true就重复,不允许添加,如果false就添加。

集合的遍历:

package com.java.base;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Map.Entry; public class CollectVisited { public static void main(String[] args) {
ArrayList<String>list = new ArrayList<String>();
list.add("张三");
list.add("李四");
System.out.println("---------get方式遍历--------------");
for(int i = 0; i < list.size(); i++){
System.out.print(list.get(i));
}
System.out.println(); //注意迭代器使用过程不能添加删除元素
System.out.println("---------迭代器的第一种访问方式--------------");
Iterator<String>iter = list.iterator();
while(iter.hasNext()){
System.out.print(iter.next() + ",");
}
System.out.println(); System.out.println("---------迭代器的第二种访问方式--------------");
for(String item : list){
System.out.print(item);
}
System.out.println(); System.out.println("----------hashmap的第一种遍历----------------");
HashMap<String, String>map = new HashMap<String, String>();
map.put("张三", "001");
map.put("李四", "002");
map.put("王五", "003");
Set<Entry<String, String>>entrys = map.entrySet();//
for(Entry<String, String>entry : entrys){
System.out.println(entry.getKey() + "的代号是:" + entry.getValue());
} System.out.println("----------hashmap的第二种遍历----------------");
Iterator<Entry<String, String>>eiter = entrys.iterator();
while(eiter.hasNext()){
System.out.println(eiter.next());
} } }

java 泛型练习:

泛型的好处:
 1.把运行时出现的问题提前至了编译时
 2.避免了无谓的强制类型转换。
  泛型方法的定义格式:
   修饰符<声明自定义泛型>返回值类型  函数名(形参列表。。。)
 泛型类的定义格式:
  class 类名<声明自定义泛型>{
  
  }
 泛型接口的定义格式:
  interface 接口名<声明自定义的泛型>{
  
  }
  注意:
   1.泛型中没有多态的概念,两边数据类型必须一致
   2.在方法上的自定义泛型的具体数据类型是调用该方法的时候传入的实参确定的

package com.java.base;

import java.util.ArrayList;

interface MyInterface<T>{
public void add(T t);
public void remove(T t);
} //自定义一个集合对象
class MyList <T> implements MyInterface<T> {
Object[] arr;
int index = 0; public MyList(){
arr = new Object[10];
}
public void add(T o){
arr[index++] = o;
}
public int size(){
return index;
}
public T get(int i){
return (T)arr[i];
}
@Override
public void remove(T t) {
int j = -1;
for(int i = 0; i < index; i++){
if(((T)arr[i]).equals(t)){
j = i;
break;
}
} for(; j < index - 1; j++){
arr[j] = arr[j + 1];
}
arr[index - 1] = null;
index--;
}
} public class Genericity_exercise {
/*泛型的好处:
1.把运行时出现的问题提前至了编译时
2.避免了无谓的强制类型转换。
泛型方法的定义格式:
修饰符<声明自定义泛型>返回值类型 函数名(形参列表。。。)
泛型类的定义格式:
class 类名<声明自定义泛型>{ }
泛型接口的定义格式:
interface 接口名<声明自定义的泛型>{ }
注意:
1.泛型中没有多态的概念,两边数据类型必须一致
2.在方法上的自定义泛型的具体数据类型是调用该方法的时候传入的实参确定的
*/ public static <T> T print(T o){ return o;
}
public static void main(String[] args) { ArrayList<String>list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i).toUpperCase());
}
System.out.println(print(213));
System.out.println(print("asfd")); MyList mylist = new MyList<String>();
mylist.add("eee");
mylist.add("fff");
mylist.add("ggg");
mylist.add("hhh");
mylist.remove("fff");
for(int i = 0; i < mylist.size(); i++){
System.out.println(mylist.get(i));
} } }

java 集合专练的更多相关文章

  1. Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  2. Java集合概述、Set集合(HashSet类、LinkedHashSet类、TreeSet类、EnumSet类)

    Java集合概述.Set集合(HashSet类.LinkedHashSet类.TreeSet类.EnumSet类) 1.Java集合概述1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指 ...

  3. Java笔记:Java集合概述和Set集合

    本文主要是Java集合的概述和Set集合 1.Java集合概述 1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,数组 ...

  4. Java集合(1)一 集合框架

    目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) java集合(4)一 红黑树. ...

  5. JAVA (集合和数据结构)

    Collection和Collections的区别: 1.java.util.Collection 是一个集合接口.它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类 ...

  6. Java集合框架详解(全)

    一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下 ...

  7. 【由浅入深理解java集合】(二)——集合 Set

    上一篇文章介绍了Set集合的通用知识.Set集合中包含了三个比较重要的实现类:HashSet.TreeSet和EnumSet.本篇文章将重点介绍这三个类. 一.HashSet类 HashSet简介 H ...

  8. 知识点:Java 集合框架图

    知识点:Java 集合框架图 总结:Java 集合进阶精讲1 总结:Java 集合进阶精讲2-ArrayList Java集合框架图 我们经常使用的Arrayist.LinkedList继承的关系挺复 ...

  9. JAVA—集合框架

    ref:https://blog.csdn.net/u012961566/article/details/76915755 https://blog.csdn.net/u011240877/artic ...

随机推荐

  1. UVA 825 Walking on the Safe Side(记忆化搜索)

      Walking on the Safe Side  Square City is a very easy place for people to walk around. The two-way ...

  2. [RxJS] Starting a Stream with SwitchMap & switchMapTo

    From an event map to another event we can use switchMap(), switchMap() accept an function which retu ...

  3. Word文档分割总结

    Word文档分割总结 方法: 1. word创建子文件实现文件分割 2. VBA实现 3. 网上分割合并的插件软件 一. word创建子文件实现文件分割 打开需要分割的文件 >> 视图 & ...

  4. FileShare文件读写锁解决“文件XXX正由另一进程使用,因此该进程无法访问此文件”(转)

    开发过程中,我们往往需要大量与文件交互,读文件,写文件已成家常便饭,本地运行完美,但一上到投产环境,往往会出现很多令人措手不及的意外,或开发中的烦恼,因此,我对普通的C#文件操作做了一次总结,问题大部 ...

  5. Winform改变Textbox边框颜色(转)

    namespace MyTextBoxOne { //使用时必须把文本框的BorderStyle为FixedSingle才能使用 //一些控件(如TextBox.Button等)是由系统进程绘制,重载 ...

  6. struts2 result的type属性

    目前只使用过以下3种,都是直接跳转到另一个action  chain: 写法:<result name="success" type="chain"> ...

  7. 最短路径floy算法———模板

    #include<cstdio>int n,i[1000][1000];int main(){ scanf("%d",&n); for (int a=1;a&l ...

  8. Jquery对选取到的元素显示指定的长度,对于的字符串用“...”显示

    $(function() { $(".video_name").each(function() { var s = $(this).text(); $()); }); }); fu ...

  9. Nutch的日志系统

    一.Nutch日志实现方式 1.Nutch使用slf4j作为日志接口,使用log4j作为具体实现.关于二者的基础,请参考 http://blog.csdn.net/jediael_lu/article ...

  10. CSS3 基础知识

    CSS3 基础知识1.边框    1.1 圆角  border-radius:5px 0 0 5px;    1.2 阴影  box-shadow:2px 3px 4px 5px rgba(0,0,0 ...