初学java,感觉java的数据结构(是叫java集合构架吧)与C++的STL相比,复杂了很多,操作极度不方便,还令人相当费解。下面是我暂时遇到的问题,帮忙解决和解释下!!!!!!
import java.util.*;
public class dataStruck{
public static void main(String[] args){
Stack s = new Stack();?//没有先声明其数据类型,之后怎么处理啊?如下的一个赋值。
//好像赋任何类型的值,它都接受。
Queue q = new LinkedList();//如此定义,实在别扭,是因为java没指针,不能像C/C++那样实现吗?
//stack
int n;
s.push(new Integer(1));
s.push(new Integer(3));
s.push(new Integer(4));
for(int i=0; i<s.size(); i++){
n = s.pop();//为什么不能这样赋值??要达到我的这个目的,该怎么做?
//不可能只用于输出吧,大多数情况总得把它作为中间数据处理啊?
System.out.print(n + " ");
}
}
}感觉java与windows一样臃肿。希望回答问题的尽量全面回答我所有的问题!!!
import java.util.*;
public class dataStruck{
public static void main(String[] args){
Stack s = new Stack();?//没有先声明其数据类型,之后怎么处理啊?如下的一个赋值。
//好像赋任何类型的值,它都接受。
Queue q = new LinkedList();//如此定义,实在别扭,是因为java没指针,不能像C/C++那样实现吗?
//stack
int n;
s.push(new Integer(1));
s.push(new Integer(3));
s.push(new Integer(4));
for(int i=0; i<s.size(); i++){
n = s.pop();//为什么不能这样赋值??要达到我的这个目的,该怎么做?
//不可能只用于输出吧,大多数情况总得把它作为中间数据处理啊?
System.out.print(n + " ");
}
}
}感觉java与windows一样臃肿。希望回答问题的尽量全面回答我所有的问题!!!
这应该是Java1.4前的使用方式,没有进行类型检查。Java1.5一般使用泛型。
Queue q = new LinkedList();
//如此定义,实在别扭,是因为java没指针,不能像C/C++那样实现吗?
没有什么别扭,对面向对象思想理解深刻了,就会觉得正常。 你的这些问题,说明你对Java学得还很浅
用泛型:Stack<Integer> s = new Stack<Integer>();
集合类默认的元素类型是Object,因此,任意的类型都能添加进去。Queue q = new LinkedList();//如此定义,实在别扭,是因为java没指针,不能像C/C++那样实现吗?
LinkedList实现了Queue接口,就好比父类的引用变量来引用子类的实例一样,java里面提倡面向接口编程,而不是面向实现编程。n = s.pop();
用泛型以后就没有问题了个人感觉java的集合类不知道有多么方便简单而且功能强大!
java中有泛型,可以在声明的时候加以限定,不限定的话编译器会给一个警告,
Stack<object> s = new Stack<object>();
当然你指定了数据类型后就只能往里面存储对应的实例了
Queue q = new LinkedList();//如此定义,实在别扭,是因为java没指针,不能像C/C++那样实现吗?
怎么别扭了?子类为父类接口初始化,典型的面向对象的多态,不好意思,c++学的不好,指针忘的差不多了
n = s.pop();//为什么不能这样赋值??要达到我的这个目的,该怎么做?
//不可能只用于输出吧,大多数情况总得把它作为中间数据处理啊?是的,stack不可能这样push一下再pop一下,多数时候是作为中间数据处理的,应用的时候可以把stack当做一个缓冲区变量。再由别的方法去调用stack的内容。
public class dataStruck{
public static void main(String[] args){
Stack<Inteter> s = new Stack()<Integer>;?//没有先声明其数据类型,之后怎么处理啊?如下的一个赋值。
//好像赋任何类型的值,它都接受。
Queue<Integer> q = new LinkedList()<Integer>;//如此定义,实在别扭,是因为java没指针,不能像C/C++那样实现吗?这里有啥好别扭的?
//stack
int n;
s.push(new Integer(1));
s.push(new Integer(3));
s.push(new Integer(4));
for(int i=0; i<s.size(); i++){
n = s.pop();//为什么不能这样赋值??要达到我的这个目的,该怎么做?
//不可能只用于输出吧,大多数情况总得把它作为中间数据处理啊?
System.out.print(n + " ");
}
}
}学深了,就不会有这样的感觉了,初学都这样的
import java.util.*;
public class DataStruck {
@SuppressWarnings("unchecked")
public static void main(String[] args){
// Q:没有先声明其数据类型,之后怎么处理啊?如下的一个赋值。
// A:声明一个容器
Stack s = new Stack();
// 好像赋任何类型的值,它都接受。
// 如此定义,实在别扭,是因为java没指针,不能像C/C++那样实现吗?
// java有指针,引用就是个指针,接口生命
Queue q = new LinkedList();
//stack
Object n;
s.push(new Integer(1));
s.push(new Integer(3));
s.push(new Integer(4));
for(int i=0; i<=s.size(); i++){
//这样就可以了
n=(s.pop());//为什么不能这样赋值??要达到我的这个目的,该怎么做?
//不可能只用于输出吧,大多数情况总得把它作为中间数据处理啊?
System.out.print(n + " ");
}
}
}程序帮你调通了,注意数据类型,和面向对象的编程方法,多看看API
改完的:
import java.util.*;
public class dataStruck{
public static void main(String[] args){
Stack s = new Stack();//没有先声明其数据类型,之后怎么处理啊?如下的一个赋值。
//好像赋任何类型的值,它都接受。
// Queue<Integer> q = new LinkedList()<Integer>;//如此定义,实在别扭,是因为java没指针,不能像C/C++那样实现吗?这里有啥好别扭的?
//stack
Object n; s.push(new Integer(1));
s.push(new Integer(3));
s.push(new Integer(4));
s.push(6);
int x=s.size();
for(int i=0;i<x;i++){
n=(s.pop());
System.out.println("weishenmene"+n);
}
}}
public static void main(String args[]) {
Stack<Integer> s = new Stack<Integer>();
Queue<Integer> q = new LinkedList<Integer>(); // stack
int n;
s.push(1);
s.push(3);
s.push(4);
for (int i = 0; i < s.size(); i++) {
n = s.pop();
System.out.print(n + " ");
} }