Java不能使用泛型数组 Level Order Traverse Binary Tree
推荐于2017-11-21 22:33:48
最佳答案
|
1
|
public static void main(String[] args) { |
// 不能使用泛型数组
// Cannot create a generic array of List<String>
// List<String>[] lists = new List<String>[10];
// 但是你可以使用集合数组, 如果你非要这样做的话
List[] test2 = new List[10];
// 我不确定你这样做的动机是什么, 如果非要使用到泛型集合数组的话, 也可以这样
// Key: 索引
// Value: 泛型集合
// 缺点: 索引需要自己维护
Map<Integer, List<String>> collectionArray = new LinkedHashMap<Integer, List<String>>();
}
追问
我是想晓得为什么不能这么做 原因是什么
追答
这个是Java语言的规范, 这是一个硬性约束.
就好比你看一部电影, 在看的时候你不能改变什么, 如果非要改变什么就只能把它拆分开, 再加入一些你自己的东西, 但这时候已经不是原来的电影了.
也就是说, 如果你有能力的话, 你也可以破坏掉(或者说升级)这个约束.
不过就个人而言, Java有这么多人在使用它, 既然出现这样的约束必定有其原因所在.
再者, Java对程序员而言是应用型语言, 而不是研究性语言.
package com.skex; import java.util.LinkedList; import java.util.Queue; public class BinaryNode<T> { public T element; public BinaryNode<T> left; public BinaryNode<T> right; public BinaryNode(T ob) { this.element = ob; this.left=null; this.right=null; } public BinaryNode(){ this.left=null; this.right=null; } public T getElement() { return element; } public BinaryNode<T> getLeft() { return left; } public void setLeft(BinaryNode<T> left) { this.left = left; } public BinaryNode<T> getRight() { return right; } public void setRight(BinaryNode<T> right) { this.right = right; } public void levelTraverse(BinaryNode<T> root){ if(root == null) return; // //queue.offer(root); //queue.isEmpty() //BinaryNode<T> node = queue.poll(); // Queue<BinaryNode<T>> queue = new LinkedList<BinaryNode<T>>();//层序遍历时保存结点的队列 queue.offer(root);//初始化 while(!queue.isEmpty()){ BinaryNode<T> node = queue.poll(); System.out.print(node.element + " ");//访问节点 if(node.left != null) queue.offer(node.left); if(node.right != null) queue.offer(node.right); } } }
package com.skex; public class LevelOrderBiTree { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //levelTraverse(tree.root); /*构建二叉树*/ //BinaryNode<Integer>[] s_arr=new BinaryNode<Integer>[6]; BinaryNode<Integer> s_arr0 = new BinaryNode<Integer>(0); BinaryNode<Integer> s_arr1 = new BinaryNode<Integer>(1); BinaryNode<Integer> s_arr2 = new BinaryNode<Integer>(2); BinaryNode<Integer> s_arr3 = new BinaryNode<Integer>(3); BinaryNode<Integer> s_arr4 = new BinaryNode<Integer>(4); BinaryNode<Integer> s_arr5 = new BinaryNode<Integer>(5); s_arr0.left = s_arr1; // 0 s_arr0.right = s_arr2; // 1 2 s_arr1.left = s_arr3; // 3 5 s_arr3.left = s_arr4; //4 s_arr2.right = s_arr5; //所以层序遍历的结果为:0 1 2 3 5 4 new BinaryNode<Integer>().levelTraverse(s_arr0); //0 1 2 3 5 4 } }

浙公网安备 33010602011771号