泛型的定义: 在类定义的时候给定一个类型
Public class Point<T> 给定一个不确定的类型,当类实例化的时候或者使用的时候给定一个确定的类型,则别的数据类型就不能使用了
Point<String> p=new Point(); 说明这个类 现在只能存放String
Point<Integer> p=new Point(); 只能存放Integer
泛型的类型不能是基本数据类型
集合:
为了解决数据存储的问题,JDK完成的一套数据结构,在开发中肯定会使用数组,但是数组长度是个问题 一旦声明长度不可改变
集合就是一套动态对象数组 public final Object[] value;
顺序集合:
Collection 最大的父接口
List 特点: 有序 可重复 本身也是接口 Set 不可重复
使用以上接口,则必须实例化该接口的实现类:
List : ArryList Vector LinkedList
ArrayList Vector 的区别?
ArrayList 异步处理 ,非线程安全 效率高 新的类
Vector 同步处理, 线程安全 效率低 老的类
LinkedList 特点: 实现的方式是基于链表,在进行数据插入 和删除的时候很方便, 但是查询效率不高
ArrayList 特点: 基于数组开发的,在进行数据插入的时候由于在中间部分 效率很低(要移动数据) 但是查询效率很高
Set: TreeSet HashSet
TreeSet 有序的 不可重复的集合
通过 comparable接口中的 comparTo()方法完成的排序,该方法返回 3个值 1 -1 0
HashSet 无序的 不可重复的集合
通过哈希表完成的数据存储,每个对象都会生成一个HashCode 对应哈希表中索引,根据Hashcode随机分配
根据对象中equals方法来判断集合中的内容是否重复
注意: 使用自定义类型的时候,一般来说要实现 Comparble接口,hashCode 和equals方法
循环链表:
Node1 node2 node3---> node1
击鼓传花
package org.node;
public class Game {
//实例化链表存储游戏的人数
LinkList list=new LinkList();
int num; //总人数
int key; // 数到几退出
// 初始化游戏的方法
public Game(int num,int key) {
this.num=num;
this.key=key; }
public void play()throws Exception{
for(int i=0;i<num;i++) { //把游戏人数增加到链表中
list.add(i, i); }
System.out.println("-----------游戏开始之前------------------");
for(int i=0;i<list.size;i++) {
System.out.print(list.get(i)); }
System.out.println("------------------游戏开始------------------------");
int jCount=num; //开始人数 等于总人数
int j=0; //累加器
Node node=list.head; //把一个头节点赋值给一个节点 while(jCount!=1) {
if(node.getElement()!=null&&Integer.parseInt(node.getElement().toString())!=-1) {
j++;
if(j%key==0) {
node.setElement(-1); jCount--; System.out.println(); for(int i=0;i<list.size;i++) {
System.out.print(list.get(i)+" "); } } } node=node.next; }
System.out.println("---------游戏结束了------------------------");
for(int i=0;i<list.size;i++) {
System.out.print(list.get(i)+" "); } }
public static void main(String[] args) throws Exception {
Game g=new Game(10, 3);
g.play(); } }
|