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. 如何实现带照片缩略图的Listview

    ackage com.demo; import java.util.ArrayList; import android.app.Activity; import android.content.Con ...

  2. Java中日期时间API小结

    Java中为处理日期和时间提供了大量的API,确实有把一件简单的事情搞复杂的嫌疑,各种类:Date Time Timestamp Calendar...,但是如果能够看到时间处理的本质就可以轻松hol ...

  3. mysql 主从复制配置步骤

    1.准备两台数据库环境,或者单台多实例环境,能否正常启动和登录. 2.配置my.cnf文件,主库配置log-bin和server-id参数,从库配置server-id,不能和主库及其他从库一样,一般不 ...

  4. python-文件操作(1)

    本文内容涉及python打开/创建文件对象,文件的读写.文件指针位置的移动.获取命令行参数. 1. open() open函数以指定模式返回一个file对象,如: file_object = open ...

  5. MySQL 一些小知识

    1. 关于多表查询 我的理解:由于MySQL多表查询时表之间的连接是笛卡尔积的方式,所以尽量少使用多表查询,如果使用则使用嵌套语句 例:说明: `tb_notice_message` 表数量百万级别以 ...

  6. js判断浏览器类型以及版本

    你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, Safari四大浏览器之外,世界上还有近百种浏览器. 几天前,浏览器家族有刚诞生了一位小王子,就是Google推出的 ...

  7. Mysql学习(慕课学习笔记4)创建数据表、查看数据表、插入记录

    创建数据表 Create table [if not exists] table_name(column_name data_type,…….) UNSIGNED 无符号SIGNED 有符号 查看创建 ...

  8. 浅析 JavaScript 组件编写

    之前因项目需要也编写过一些简单的JS组件,大多是基于JQuery库的,一直也没有过总结,导致再次写到的时候还去Google, 近日看到一个文章总结的挺好,拿过整理一下做个备忘. 此次同样是基于jque ...

  9. [Apache系列]怎样在windows下配置apache vhost

    找到你的Apache安装目录,下图为小编的Apache安装的目录 2 点击conf文件夹  进入配置目录,找到httpd.conf 文件, 3 打开httpd.conf 文件,如图, 找到地475行, ...

  10. 存储过程--表变量和while简单运用

    1.sql创建表/*订单*/CREATE TABLE Orders ( PRIMARY KEY(Id), Id int, Name varchar(20))2.存储过程ProTestDT    1)创 ...